【问题标题】:Convolutional neural network with grayscale images具有灰度图像的卷积神经网络
【发布时间】:2020-12-02 09:08:38
【问题描述】:

我正在尝试运行 CNN(卷积神经网络),其中包含 1 个通道/灰度图像,大小为 28x28 像素。当我尝试训练模型时,它会说:

ValueError:layersequential_5 的输入 0 与 layer 不兼容::预期 min_ndim=4,发现 ndim=3。收到的完整形状:[None, 28, 28]

model = models.Sequential()
model.add(layers.Conv2D(28, (3, 3), activation='relu', input_shape=(28, 28, 1)))
model.add(layers.MaxPooling2D((2, 2)))
model.add(layers.Conv2D(56, (3, 3), activation='relu'))
model.add(layers.MaxPooling2D((2, 2)))
model.add(layers.Conv2D(56, (3, 3), activation='relu'))
model.add(layers.Flatten())
model.add(layers.Dense(56, activation='relu'))
model.add(layers.Dense(62))

model.summary()

【问题讨论】:

  • 也许将您的 inptu_shape 更改为 1、1、28、28 的四个暗淡?
  • @SirBaum input_shape 我认为自己添加了批处理维度。

标签: python tensorflow


【解决方案1】:

您必须以支持频道尺寸的格式提交图片,即您的图片必须具有 (28, 28, 1) 的形状 - 三个维度,而不是两个维度。 通常输入是四维的:(batch_size, width, height, num_of_channels)。 您没有提供用于训练的代码,因此我无法更具体地说明如何解决输入数据集形状的问题。

【讨论】:

  • 为了训练我的模型,我使用的代码是 model.compile(optimizer='adam', loss=tf.keras.losses.SparseCategoricalCrossentropy(from_logits=True), metrics=['accuracy'] ) 历史 = model.fit(train_images, train_labels, epochs=1, validation_data=(test_images, test_labels))
  • 如何初始化 train_imagestest_images?如果它们是 numpy 数组,那么只需将它们重塑为在末尾增加一个大小为 1 的维度
  • 如何将大小为 1 的维度添加到 numpy 数组中?
  • x = x.reshape(x.shape + (1,)) 或 x = x[..., np.newaxis]
  • 请提供整个代码示例,包括 model.compilemodel.fit,将 np.random 用于数据集和标签。如果您提供完整代码,我将在我的机器上检查它。 请使用 np.random 模拟数据集进行操作
猜你喜欢
  • 2023-03-08
  • 2020-07-13
  • 2018-06-22
  • 1970-01-01
  • 2017-01-01
  • 1970-01-01
  • 2017-07-31
  • 2018-10-19
相关资源
最近更新 更多