Ошибка размера матрицы при попытке предсказать число из изображения
У меня возникли проблемы при кодировании моей первой программы NN. Я в основном хотел бы нарисовать число на холсте и передать его NN, который должен показать "распознанное" число.
#create the NN, train with mnist and load img saved from canvas
def Analizza():
mnist = tf.keras.datasets.mnist
(x_train, y_train), (x_test, y_test) = mnist.load_data()
x_train = tf.keras.utils.normalize(x_train, axis=1)
model = tf.keras.models.Sequential()
model.add(tf.keras.layers.Flatten())
model.add(tf.keras.layers.Dense(128, activation=tf.nn.relu, input_shape= x_train.shape[1:]))
model.add(tf.keras.layers.Dense(128, activation=tf.nn.relu))
model.add(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=3)
model.save('modello_numeri.model')
getter(c)
width = 28
height = 28
img = Image.open(immagine_salvata)
img = img.resize((width,height), Image.BICUBIC)
img.save(immagine_salvata)
img = PIL.Image.open("immagine.jpg").convert("L")
img_ar = np.array(img)
img_ar_norm = tf.keras.utils.normalize(img_ar, axis=1)
plt.imshow(img_ar, cmap=plt.cm.binary)
plt.show()
#make prediction
predizione = model.predict(img_ar_norm, batch_size=None)
risposta = np.argmax(predizione[0])
print(risposta)
#risultato = tk.Label(window, text=risposta, font=("Helvetica",57))
#risultato.grid(row=0, column=1, sticky="E")
эта часть дает мне эти ошибки:
Исключение в обратном вызове Tkinter (последний последний вызов): Файл>"C:\Users\Massimo\AppData\Local\Programs\Python\Python37\lib\tkinter__init__. Py", строка 1705, при вызове return self.func(*args) Файл "c:/Users/Massimo/AppVisualCode/disegno.py", строка 91, в Analizza predizione = model.predict(img_ar_norm, batch_size=None) Файл "C:\Users\Massimo\AppData\Roaming\Python\" Python37\site-packages\tenorflow\python\keras\engine\training.py", строка 1113, в поле" Предсказать себя ", x, batch_size=batch_size, verbose=verbose, steps=steps) Файл" C: \ Users \ Massimo \ AppData " \Roaming\Python\Python37\site-packages\tenorflow\python\keras\engine\training_arrays.py", строка 329, в model_iteration batch_outs = f(ins_batch) Файл" C: \ Users \ Massimo \ AppData \ Roaming \ Python \ " Python37 \ site-packages \ensorflow\python\keras\backend.py", строка 3076, в вызове run_metadata=self.run_metadata) Файл"C:\Users\Massimo\AppData\Roaming\Python\Python37\site-packages\tenorflow " \ python \ client \ session.py ", строка 1439, в вызове run_metadata_ptr) F Файл C: \ Users \ Massimo \ AppData \Roaming\Python\Python37\site-packages\tenorflow\python\framework\errors_impl.py", строка 528, на выходе c_api.TF_GetCode(self.status.status)) тензор потока. python.framework.errors_impl.InvalidArgumentError: Несовместимый размер матрицы: в [0]: [28,28], в [1]: [784,128] [[{{node MatMul}}]]
Я понял, что должна быть проблема с размером матрицы, ожидаемой для прогноза, но почему? Я сохраняю изображение, изменяю его размер на 28x28, черно-белое, а затем открываю как массив np, как если бы это был x_train[0]
Спасибо Макс