Керас + мнист + тестирование собственных образов.Плохой прогноз - PullRequest
0 голосов
/ 04 февраля 2019

Он отлично работает, тестируя собственные тестовые изображения 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 (предсказано правильно) и одна нижняя скопированы и вставлены (ошибочно предсказано)

Ответы [ 2 ]

0 голосов
/ 05 февраля 2019

Я понял это.Я не получил правильные нормализованные значения с этим блоком кода.

image = cv.imread(file, cv.IMREAD_GRAYSCALE)
image = cv.resize(image, (28,28))
image = 255-image     

Вместо этого мне пришлось исправить это с делением внизу (здесь внизу), которое я по ошибке поставилперед image = 255-image в более ранней попытке.Это было одной из ошибок, наряду с отсутствием приведения типа к float32 , который позволил нормализовать, а также изменить форму между ними.

image = cv.imread(file, cv.IMREAD_GRAYSCALE)
image = cv.resize(file, (28, 28))
image = image.astype('float32')
image = image.reshape(1, 28, 28, 1)
image = 255-image
image /= 255
0 голосов
/ 04 февраля 2019

Некоторые предположения

1) Вы нормализовали данные вашего поезда и испытаний.Я предполагаю, что вы могли забыть нормализовать свои входные данные, прежде чем делать прогноз?

x_train /= 255
x_test /= 255

2) Вы убедились, что модель загружена правильно?После сохранения и загрузки убедитесь, что он выполняет то же самое на тестовом наборе.Если результаты не очень хорошие, это говорит о том, что весовые коэффициенты загружаются неправильно.

3) Была ли какая-либо предварительная обработка (вне вашей собственной нормализации) для набора данных, предоставленная tf.keras.datasets.mnist.load_data()?Если это так, то перед выводом вам придется предварительно обработать ваши собственные входные данные с теми же преобразованиями

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...