ValueError:检查输入时出错:预期dense_1_input有2维,但得到了形状为(60000、28、28)的数组

Posted

技术标签:

【中文标题】ValueError:检查输入时出错:预期dense_1_input有2维,但得到了形状为(60000、28、28)的数组【英文标题】:ValueError: Error when checking input: expected dense_1_input to have 2 dimensions, but got array with shape (60000, 28, 28) 【发布时间】:2019-12-17 03:04:50 【问题描述】:

我正在尝试训练我的深度神经网络识别手写数字,但我不断收到标题中前面所述的错误,我不知道为什么。

我尝试重塑“x_train”和“y_train”,但没有改变结果。 model.add(Flatten()) 也不起作用。

import matplotlib.pyplot as plt
import keras
from keras import optimizers
from keras.models import Sequential
from keras.layers import Dense, Activation, Flatten
from keras.datasets import mnist

(x_train, y_train), (x_test, y_test) = mnist.load_data()

train_images = x_train.reshape(60000, 784)
test_images = x_test.reshape(10000, 784)
train_images = train_images.astype('float32')
test_images = test_images.astype('float32')
train_images /= 255
test_images /= 255

train_labels = keras.utils.to_categorical(y_train, 10)
test_labels = keras.utils.to_categorical(y_test, 10)

model = Sequential()

model.add(Dense(512, activation="relu", input_shape=(784,)))

for x in range (0, 10):
    model.add(Dense(512, activation="relu"))

model.add(Dense(10, activation="softmax"))
model.summary()

model.compile(optimizer="rmsprop", loss="binary_crossentropy", metrics=['accuracy'])

model.fit(x_train, y_train, epochs=100, verbose=2, validation_split=0.0, shuffle=True, initial_epoch=0, validation_data=(train_images, train_labels), steps_per_epoch=10, validation_steps=10, validation_freq=1)

我期待培训开始,但我得到了这个错误:ValueError: Error when checks input: expected dense_1_input to have 2 dimensions, but got array with shape (60000, 28, 28)。

【问题讨论】:

【参考方案1】:

您正在传递训练数据集而不对其进行整形。

代替这一行:

model.fit(x_train, y_train, epochs=100, verbose=2, validation_split=0.0, shuffle=True, initial_epoch=0, validation_data=(train_images, train_labels), steps_per_epoch=10, validation_steps=10, validation_freq=1)

使用这个:

model.fit(train_images, train_labels, epochs=100, verbose=2, validation_split=0.0, shuffle=True, initial_epoch=0, validation_data=(train_images, train_labels), steps_per_epoch=10, validation_steps=10)

【讨论】:

【参考方案2】:

您需要将数据集从形状 (n, width, height) 转换为 (n, depth, width, height)。

X_train = X_train.reshape(X_train.shape[0], 1, 28, 28) X_test = X_test.reshape(X_test.shape[0], 1, 28, 28)

【讨论】:

以上是关于ValueError:检查输入时出错:预期dense_1_input有2维,但得到了形状为(60000、28、28)的数组的主要内容,如果未能解决你的问题,请参考以下文章

ValueError:检查输入时出错:预期的dense_26_input具有形状(45781,)但得到的数组具有形状(2,)

ValueError:检查输入时出错:预期 input_1 有 4 个维度,但得到的数组具有形状(无、无、无)

model.fit 给出 ValueError :检查输入时出错:预期的 conv2d 得到了形状为 () 的数组

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

ValueError:检查输入时出错:预期 lstm_1_input 具有 3 个维度,但得到的数组具有形状 (393613, 50)

ValueError:检查输入时出错:预期 permute_input 有 4 个维度,但得到了形状为 (1, 4) 的数组