检查输入时出错:预期 conv2d_1_input 的形状为 (3, 32, 32) 但得到的数组的形状为 (32, 32, 3)

Posted

技术标签:

【中文标题】检查输入时出错:预期 conv2d_1_input 的形状为 (3, 32, 32) 但得到的数组的形状为 (32, 32, 3)【英文标题】:Error when checking input: expected conv2d_1_input to have shape (3, 32, 32) but got array with shape (32, 32, 3) 【发布时间】:2019-12-01 02:42:53 【问题描述】:

我想针对 cifar10 数据集训练 CNN,但出现此错误 检查输入时出错:预期 conv2d_10_input 的形状为 (3, 32, 32),但得到的数组的形状为 (32, 32, 3)

this is my CNN model

历元 = 10 batch_size = 32

model.fit(X_train, Y_train, validation_data=(X_test, Y_test), epochs=epochs, batch_size=batch_size, verbose = 1)

【问题讨论】:

改变这个'input_shape=(32, 32, 3)' 【参考方案1】:

数据集似乎是(高度、宽度、通道)格式,但模型需要的是(通道、高度、宽度)格式。

我们可以使用tf.transpose() 函数在这些之间进行转换,该函数可以围绕张量的维度“切换”。

要将单个图像张量从 HWC 转换为 CHW,只需执行以下操作:

reshaped = tf.transpose(image_tensor, (2,0,1))

要转换批次,您可以这样做:

reshaped = tf.transpose(images_tensor, (0,3,1,2))

【讨论】:

你可以设置channels_last = False

以上是关于检查输入时出错:预期 conv2d_1_input 的形状为 (3, 32, 32) 但得到的数组的形状为 (32, 32, 3)的主要内容,如果未能解决你的问题,请参考以下文章

Python | Keras:ValueError:检查目标时出错:预期conv2d_3有4个维度,但得到了有形状的数组(1006,5)

ValueError:检查输入时出错:预期dense_1_input的形状为(180,),但数组的形状为(1,)

检查输入时出错:预期 lstm_1_input 的形状为 (71, 768) 但得到的数组形状为 (72, 768)

检查输入时出错:预期 flatten_1_input 有 3 个维度,但得到了形状为 (28, 28) 的数组

检查输入时出错:预期 lstm_1_input 有 3 个维度,但得到了形状为 (5, 3) 的数组

ValueError:检查输入时出错:预期dense_11_input 具有3 维,但得到了形状为(0, 1) 的数组