Keras 输入形状抛出预期 4d 的值错误,但得到一个形状为 (60000, 28,28) 的数组

(x_train, y_train), (x_test, y_test) = tf.keras.datasets.fashion_mnist.load_data()

x_train = x_train.astype('float32') / 255

x_test = x_test.astype('float32') / 255


x_train.shape #Shape is (60000, 28, 28)

然后模型确保输入形状为 28,28,1,因为 60k 是样本。


model2 = tf.keras.Sequential()

# Must define the input shape in the first layer of the neural network

model2.add(tf.keras.layers.Conv2D(filters=64, kernel_size=2, padding='same', activation='relu', input_shape=(28,28,1))) 

model2.add(tf.keras.layers.MaxPooling2D(pool_size=2))

model2.add(tf.keras.layers.Dropout(0.3))

model2.add(tf.keras.layers.Conv2D(filters=32, kernel_size=2, padding='same', activation='relu'))

model2.add(tf.keras.layers.MaxPooling2D(pool_size=2))

model2.add(tf.keras.layers.Dropout(0.3))

model2.add(tf.keras.layers.Flatten())

model2.add(tf.keras.layers.Dense(256, activation='relu'))

model2.add(tf.keras.layers.Dropout(0.5))

model2.add(tf.keras.layers.Dense(10, activation='softmax'))

model2.compile(loss='categorical_crossentropy',

             optimizer='adam',

             metrics=['accuracy'])

model2.fit(x_train,

         y_train,

         batch_size=64,

         epochs=25,)

我收到错误:ValueError:检查输入时出错:预期 conv2d_19_input 有 4 个维度,但得到了形状为 (60000, 28, 28) 的数组


就像每次我尝试理解输入形状时一样,我会更加困惑。就像我在这一点上对 conv2d 和密集的输入形状感到困惑。无论如何,为什么这是错误的?


饮歌长啸
浏览 215回答 2
2回答

HUX布斯

是的,这是正确的,参数input_shape准备取 3 个值。然而,该函数Conv2D需要一个 4D 数组作为输入,包括:样本数通道数图像宽度图像高度而该函数load_data()是一个由宽度、高度和样本数量组成的 3D 数组。您可以期望通过简单的重塑来解决该问题:train_X = train_X.reshape(-1, 28,28, 1) test_X = test_X.reshape(-1, 28,28, 1)来自 keras 文档的更好定义:输入形状:4D 张量,形状:(batch,channels,rows,cols)如果 data_format 是“channels_first”或 4D 张量,形状:(batch,rows,cols,channels)如果 data_format 是“channels_last”。

慕尼黑8549860

您缺少通道维度(值为 1),可以通过重塑数组轻松纠正:x_train = x_train.reshape((-1, 28, 28, 1)) x_test = x_test.reshape((-1, 28, 28, 1))
打开App,查看更多内容
随时随地看视频慕课网APP

相关分类

Python