A więc niedawno zrobiłem model oparty na danych mnist z biblioteki tensorflow (obrazki 28x28 odręcznie napisanych cyfr). Testowanie wyszło całkiem ładnie, ale gdy chciałem dodać własny obrazek napisanej cyfry, model kompletnie nie potrafił odgadnąć co to za cyfra (dla 7 zwracał np. 3). Testowałem to na różnych własnych obrazkach i niczego to nie zmieniło, wciąż nie wiem gdzie tkwi problem. Oto kod:
import tensorflow as tf
import cv2
import numpy as np
# Loading a dataset
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)
x_test = tf.keras.utils.normalize(x_test, axis=1)
# Creating a model
model = tf.keras.models.Sequential()
# Input Layer
model.add(tf.keras.layers.Flatten())
# Hidden Layers
model.add(tf.keras.layers.Dense(128, activation=tf.nn.relu))
model.add(tf.keras.layers.Dense(128, activation=tf.nn.relu))
# Output Layer
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)
img_array = cv2.imread("image.jpg", cv2.IMREAD_GRAYSCALE)
image = cv2.resize(img_array, (28, 28))
image = tf.convert_to_tensor(image)
X = np.array(image)
X = X/255.0
X = tf.expand_dims(X, [0])
prediction = model.predict(X)
print(f"prediction: {np.argmax(prediction)}")
Zaznaczyłem część kodu, której najbardziej nie jestem pewien.
Do tego jeden z własnych obrazków jakich użyłem:
Wiem, że program nie będzie odgadywał mi wszystkiego, ale tutaj nie odgaduje kompletnie niczego. Co zrobiłem źle lub czego nie zauważyłem?