如何解决此错误:矩阵大小不兼容:In [0]:[1,786432],In [1]:[784,512] [[{{node MatMul}}]]>

时间:2019-05-29 02:32:01

标签: python tensorflow machine-learning

我需要为我的学校项目做这个简单的机器学习代码,但是经过多次修改,我仍然收到无效数组的错误。有人可以帮忙吗?我现在很绝望,因为我的提交日期快要结束了...

这是我的代码:

import tensorflow as tf
mnist = tf.keras.datasets.mnist

(x_train, y_train),(x_test, y_test) = mnist.load_data()
x_train, x_test = x_train / 255.0, x_test / 255.0
model = tf.keras.models.Sequential([

  tf.keras.layers.Flatten(),
  tf.keras.layers.Dense(512, activation=tf.nn.relu),
  tf.keras.layers.Dropout(0.2),
  tf.keras.layers.Dense(10, activation=tf.nn.softmax)
])

model.compile(optimizer='adam',
              loss='sparse_categorical_crossentropy',
             metrics=['accuracy'])

model.fit(x_train, y_train, epochs=1)
model.evaluate(x_test, y_test)
# Part 3 - Making new predictions
import numpy as np
from keras.preprocessing import image
import keras
test_image = image.load_img('Number 8.jpg')
test_image = image.img_to_array(test_image, data_format='channels_first', 
dtype='float32')
test_image = np.expand_dims(test_image, axis=0)
result = model.predict(test_image)
print(np.argmax(result[0]))

1 个答案:

答案 0 :(得分:0)

tomkot已经指出,这是一个形状问题。

MNIST的形状为[60000,28,28],这也是您用来训练模型的形状。

我用自己的照片做了一个测试,传递给预测的形状是[1、3、1728、2304]。 大小可能与“数字8.jpg”不同,但可以看到,每张图片发送的形状都不正确。

当您将图片带入训练模型的形状时,您的预测应该很好。

一种重塑方式

# load your image
test_image = test_image.resize((28, 28), resample=Image.BICUBIC))
#resize your image
test_image = test_image.resize((28,28), resample=Image.BICUBIC)
#on the prediction call reshape
result = model.predict(test_image.reshape(-1,28,28))

“-1”是表示数组包含多少数据的另一种形式。 您也可以将其编写为“ .reshape(1,28,28)”。 -1只是将其留给python本身以找出正确的值。