【问题标题】:Keras prompts Error: (Error when checking input: expected conv2d_4_input to have 4 dimensions)Keras 提示错误:(检查输入时出错:预期 conv2d_4_input 有 4 个维度)
【发布时间】:2019-06-13 20:39:39
【问题描述】:

这是我在 MNIST 数据集上使用卷积神经网络的代码。不幸的是,Keras 在通过网络时提示错误。感谢您的帮助。我想知道此类错误的原因。

这是错误:检查输入时出错:预期 conv2d_4_input 有 4 个维度,但得到的数组形状为 (45000, 28, 28)

model = models.Sequential()
model.add(layers.Conv2D(32, (3, 3), activation='relu', input_shape=(28,28, 1), padding= 'same'))
model.add(layers.MaxPooling2D((2, 2)))
model.add(layers.Conv2D(64, (3, 3), activation='relu', padding= 'same'))
model.add(layers.MaxPooling2D((2, 2)))
model.add(layers.Conv2D(128, (3, 3), activation='relu', padding= 'same'))
model.add(layers.MaxPooling2D((2, 2)))
model.add(layers.Flatten())
model.add(layers.Dropout(0.4))
model.add(layers.Dense(256, activation='relu'))
model.add(layers.Dense(10, activation='softmax'))
model.compile(optimizer='rmsprop',
loss='categorical_crossentropy',
metrics=['accuracy'])
k = 4
num_val_samples = len(train_images) // k
num_epochs = 20
all_scores = []
for i in range(k):
    print('processing fold #', i)
    valid_data = train_images[i * num_val_samples: (i + 1) *
                          num_val_samples] 
    valid_labels = train_labels[i * num_val_samples: (i + 1) *
                                num_val_samples]
partial_train_images = np.concatenate(
    [train_images[:i * num_val_samples], train_images[(i + 1) * num_val_samples:]], axis=0)
partial_train_labels = np.concatenate([train_labels[:i * num_val_samples], train_labels[(i + 1) * num_val_samples:]],axis=0)

model.fit(partial_train_images, partial_train_labels,epochs=20, 
batch_size=1, verbose=0)
val_mse, val_mae = model.evaluate(val_data, val_targets, verbose=0)
all_scores.append(val_mae)

我看过其他页面,但那里的解决方案都没有帮助。

【问题讨论】:

    标签: python keras deep-learning conv-neural-network


    【解决方案1】:

    您的数组中没有包含通道维度,对于灰度图像,它应该是一个具有一个元素的维度,因此每个样本都是(28, 28, 1)

    partial_train_images = partial_train_images.reshape((-1, 28, 28, 1))
    val_data = val_data.reshape((-1, 28, 28, 1))
    

    【讨论】:

    • 它解决了上一个问题,但出现了一个新错误:检查目标时出错:预期dense_2有2维,但得到的数组形状为(45000, 10, 2, 2)
    • @Boogey_man 为什么你的标签有这种形状?这里的任务是什么?
    • 任务是在著名的 MNIST 数据集上进行分类。诚实地。我不知道 45000 的值是从哪里来的。也许,如果我更正 input_shape 值,它可以工作吗?
    • 你是如何加载 MNIST 数据集的?
    • 从 Keras 通过 load.data 方法。如果有帮助,我可以通过系统文件进行参考。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2019-11-18
    • 2020-01-04
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2018-04-04
    • 1970-01-01
    相关资源
    最近更新 更多