我正在用keras和tensorflow建立我的第一个神经网络。我将输入输入到一个形状数组(60000、28、28)中,但是当我尝试将其输入到模型中时,出现输入格式错误的错误。
我尝试了多种不同的输入形状,包括(60000,28,28)(1,28,28)(28,28)(28,28,1),但似乎都不起作用。
model = kr.Sequential()
model.add(InputLayer(input_shape=(60000, 28, 28)))
model.add(Dense(units=784, activation='relu'))
model.add(Dense(units=392, activation='relu'))
model.add(Dense(units=196, activation='relu'))
model.add(Dense(units=10, activation='softmax'))
model.compile(loss='categorical_crossentropy', optimizer='Adam', metrics=['accuracy'])
training = model.fit(x=images_array, y=labels_array, epochs=10, batch_size=256)
我希望它可以与输入形状(60000、28、28)一起使用,但是我总是会收到此错误:
ValueError:检查输入时出错:预期input_1具有4 尺寸,但数组的形状为(60000,28,28)
编辑:
感谢所有回答的人。 cho_uc的答案确实有效,这就是为什么我接受了它。 我在帖子中提到的是,我正在尝试构建仅由密集层组成的模型,因此可以将其用作将来模型的基准。
我使用以下方法解决了输入层问题:
images_array = images_array.reshape(-1, 28 * 28)
model.add(InputLayer(input_shape=(784, )))
答案 0 :(得分:4)
Keras Conv2D
层执行卷积操作。它要求其输入为4维数组。
根据您的设置和后端(theano或tensorlow图像布局约定),我们必须将输入的形状重塑为(,1、28、28)或可能重塑为(,28、28、1)。
from keras import backend as K
if K.image_data_format() == 'channels_first' :
input_shape = (1, 28, 28)
X_train = X_train.reshape(X_train.shape[0], 1, 28, 28)
X_test = X_test.reshape(X_test.shape[0], 1, 28, 28)
else:
input_shape = (28, 28, 1)
X_train = X_train.reshape(X_train.shape[0], 28, 28, 1)
X_test = X_test.reshape(X_test.shape[0], 28, 28, 1)
因此,您应该将数据重塑为(60000,28,28,1)或(60000,1,28,28)
答案 1 :(得分:1)
需要两次更正。
model.add(InputLayer(input_shape=(28, 28, 1)))
fit()
方法的训练输入必须具有尺寸(样本数,宽度,高度,通道)。assert images_array.shape == (60000, 28, 28, 1)