Нейросеть не распознает цифры

Написал по урокам нейросеть для распознавания рукописных цифр. Обучается без ошибок, цифры из базы данных mnist распознает безошибочно, но когда пытаюсь загрузить свой пример цифры (нарисовал в photoshop), она все время ошибается. После всех преобразований (уменьшение картинки до 28x28 пикселей, перевод в градации серого и тд), вывожу изображение цифры, вроде бы визуально понятно, что это за число, но она не понимает. Вопрос №2 В конце кода закоменчено 2 строки img = img.reshape(1,28,28) # img = img/255.0 Вместо этого я прописал reshape в model.predict(img.reshape(28,28,1)), потому что иначе выскакивает ошибка Input 0 of layer "dense" is incompatible with the layer: expected axis -1 of input shape to have value 784, but received input with shape (None, 28) Я понимаю, что это связано с размером, но не понимаю, что нужно исправлять, хотя если прописать уже в model.predict, то код хотя бы срабатывает

import numpy as np
import matplotlib.pyplot as plt
from tensorflow.keras.datasets import mnist
from tensorflow import keras
from tensorflow.keras.layers import Dense, Flatten
from PIL import Image
import PIL.ImageOps
%matplotlib

(x_train, y_train), (x_test, y_test) = mnist.load_data()
x_train = x_train / 255
x_test = x_test / 255
y_train_cat = keras.utils.to_categorical(y_train,10)
y_test_cat = keras.utils.to_categorical(y_test,10)

model = keras.Sequential([
                          Flatten(input_shape=(28,28,1)),
                          Dense(128,activation='relu'),
                          Dense(10, activation='softmax')
   ])

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

model.evaluate(x_test,y_test_cat)
model.save('test_model.h5')

img = Image.open('Devat.png')
img = img.resize((28, 28))
img = PIL.ImageOps.invert(img)
img = img.convert('1')
img = np.array(img)
# img = img.reshape(1,28,28)
# img = img/255.0
plt.imshow(img, cmap=plt.cm.binary) 
plt.colorbar()
plt.show()

res = model.predict(img.reshape(28,28,1))[0]
print(np.argmax(res), max(res))

Ответы (0 шт):