keras.model.predict提高ValueError:检查输入时出错

时间:2019-04-14 19:28:35

标签: tensorflow machine-learning keras neural-network

我在MNIST数据集上训练了基本的神经网络模型。这是培训的代码:(省略了导入)

mnist = tf.keras.datasets.mnist

(x_train, y_train), (x_test, y_test) = mnist.load_data(path='mnist.npz')
x_train, x_test = x_train/255.0, x_test/255.0

#1st Define the model
model = tf.keras.models.Sequential([
    tf.keras.layers.Flatten(input_shape = (28,28)),     #input layer
    tf.keras.layers.Dense(512, activation=tf.nn.relu),  #main computation layer
    tf.keras.layers.Dropout(0.2),                       #Dropout layer to avoid overfitting
    tf.keras.layers.Dense(10, activation=tf.nn.softmax) #output layer / Softmax is a classifier AF
])

#2nd Compile the model
model.compile(optimizer='adam',
              loss='sparse_categorical_crossentropy',
              metrics=['accuracy'])

#3rd Fit the model
model.fit(x_train, y_train, epochs=5)

#4th Save the model
model.save('models/mnistCNN.h5')

#5th Evaluate the model
model.evaluate(x_test, y_test)

我想看看这个模型如何与我自己的输入一起工作,因此我在this post的帮助下编写了一个预测脚本。我的预测代码是:(省略了导入)

model = load_model('models/mnistCNN.h5')

for i in range(3):
    img = Image.open(str(i+1) + '.png').convert("L")
    img = img.resize((28,28))
    im2arr = np.array(img)
    im2arr = im2arr/255
    im2arr = im2arr.reshape(1, 28, 28, 1)
    y_pred = model.predict(im2arr)
    print('For Image',i+1,'Prediction = ',y_pred)

首先,我不了解此行的目的:

im2arr = im2arr.reshape(1, 28, 28, 1)

如果有人可以阐明为什么需要这条线,那将有很大帮助。

第二,这行代码会引发以下错误:

ValueError: Error when checking input: expected flatten_input to have 3 dimensions, but got array with shape (1, 28, 28, 1)

我在这里想念什么?

1 个答案:

答案 0 :(得分:1)

第一维用于批处理大小。它是由%matplotlib inline 内部添加的。因此,此行仅将其添加到图像数组。

keras.model

您得到的错误是因为用于训练的im2arr = im2arr.reshape(1, 28, 28, 1) 中的一个示例具有形状(28,28),因此它是输入层。要消除此错误,您需要将此行更改为

mnist dataset