Он отлично работает, тестируя собственные тестовые изображения mnist, но как только я использую изображения из-за пределов mnist, он предсказывает неверные результаты.Я даже пытался скопировать одно из изображений из набора данных mnist, и он все еще не мог предсказать правильную цифру (хотя точно такое же изображение было в порядке (предсказано), когда внутри набора данных mnist).
Возможнокто-то видит, что я делаю не так?Я предполагаю, что есть что-то с размерами или формой изображения.
import tensorflow as tf
import numpy as np
import matplotlib.pyplot as plt
from keras.models import Sequential
from keras.layers import Dense, Conv2D, Dropout, Flatten, MaxPooling2D
import cv2 as cv
(x_train, y_train), (x_test, y_test) = tf.keras.datasets.mnist.load_data()
x_train = x_train.reshape(x_train.shape[0], 28, 28, 1)
x_test = x_test.reshape(x_test.shape[0], 28, 28, 1)
input_shape = (28, 28, 1)
x_train = x_train.astype('float32')
x_test = x_test.astype('float32')
# Normalizing the RGB codes by dividing it to the max RGB value.
x_train /= 255
x_test /= 255
# -------------------------- CREATE MODEL ------------------------------
'''
model = Sequential()
model.add(Conv2D(28, kernel_size=(3,3), input_shape=input_shape))
model.add(MaxPooling2D(pool_size=(2, 2)))
model.add(Flatten()) # Flattening the 2D arrays for fully connected layers
model.add(Dense(128, activation=tf.nn.relu))
model.add(Dropout(0.2))
model.add(Dense(10,activation=tf.nn.softmax))
# ----------------------------------------------------------------------
model.compile(optimizer='adam',
loss='sparse_categorical_crossentropy',
metrics=['accuracy'])
model.fit(x=x_train,y=y_train, epochs=1)
# ----------------------------------------------------------------------
'''
model = tf.keras.models.load_model("C:/Users/A551110/PycharmProjects/keras_mnist/venv/mnistv2.model")
file = "C:/Users/A551110/Documents/images/7.png"
model.evaluate(x_test, y_test)
image = cv.imread(file, cv.IMREAD_GRAYSCALE)
image = cv.resize(image, (28,28))
image = 255-image #inverts image. Always gets read inverted.
plt.imshow(image.reshape(28, 28),cmap='Greys')
plt.show()
pred = model.predict(image.reshape(1, 28, 28, 1), batch_size=1)
print(pred.argmax())
Я пробовал pred = model.predict(image.reshape(1, 28, 28, 1))
,
, а также pred = model.predict_classes(image.reshape(1, 28, 28, 1))
Цифры, которые я предсказывал.Верхняя часть из набора данных mnist (предсказано правильно) и одна нижняя скопированы и вставлены (ошибочно предсказано)