Требуется ли предварительная обработка моего тестового изображения? - PullRequest
0 голосов
/ 03 июля 2019

Я пытался проверить мою обученную модель с помощью входного изображения, чтобы предсказать, но оно всегда было неточным.

from __future__ import absolute_import, division, print_function
import tensorflow as tf


mnist = tf.keras.datasets.mnist

(x_train, y_train),(x_test, y_test) = mnist.load_data()
x_train, x_test = x_train / 255.0, x_test / 255.0
model = tf.keras.models.Sequential([

tf.keras.layers.Flatten(input_shape=(28, 28)),
tf.keras.layers.Dense(100, activation=tf.nn.relu),
tf.keras.layers.Dropout(0.10),
tf.keras.layers.Dense(10, activation=tf.nn.softmax)
])

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

history = model.fit(x_train, y_train, epochs=1)
model.evaluate(x_test, y_test)

import numpy as np
from keras.preprocessing import image
import PIL
test_image = image.load_img('Number 8_resized.jpg', target_size=(28, 28))
test_image = image.img_to_array(test_image)
test_image = np.expand_dims(test_image, axis=0)
result = model.predict(test_image.reshape(-1, 28, 28))
print("The predicited number is:")
print(np.argmax(result[0]))

Нужно ли предварительно обрабатывать вышеуказанный код? Если да, как бы я это сделал? Спасибо.

Ответы [ 2 ]

1 голос
/ 03 июля 2019

Да, вам необходимо предварительно обработать любой тестовый образ точно так же, как вы предварительно обработали и нормализовали тренировочный набор.Возможно, вам не хватает деления на 255.

0 голосов
/ 03 июля 2019

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

Попробуйте этот код для прогнозирования:

import numpy as np
from keras.preprocessing import image
import PIL
test_image = image.load_img('Number 8_resized.jpg', target_size=(28, 28))
test_image = image.img_to_array(test_image)
test_image /= 255.
result = model.predict(test_image.reshape(-1, 28, 28))
print("The predicited number is:")
print(np.argmax(result[0]))

Полностью обновленный код:

from __future__ import absolute_import, division, print_function
import tensorflow as tf


mnist = tf.keras.datasets.mnist

(x_train, y_train),(x_test, y_test) = mnist.load_data()
x_train, x_test = x_train / 255.0, x_test / 255.0
model = tf.keras.models.Sequential([

tf.keras.layers.Flatten(input_shape=(28, 28)),
tf.keras.layers.Dense(100, activation=tf.nn.relu),
tf.keras.layers.Dropout(0.10),
tf.keras.layers.Dense(10, activation=tf.nn.softmax)
])

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

history = model.fit(x_train, y_train, epochs=1)
model.evaluate(x_test, y_test)

import numpy as np
from keras.preprocessing import image
#import PIL
test_image = image.load_img('zero.png', target_size=(28, 28))
test_image = image.img_to_array(test_image)
# test_image = np.expand_dims(test_image, axis=0)
# print(test_image.shape)
test_image /= 255.
result = model.predict(test_image.reshape(-1, 28, 28))
print("The predicited number is:")
print(np.argmax(result[0]))

Если вы хотите повысить точность данных испытаний, проверьте this учебник, а также не забудьте проверить этот пост о точности распознавания цифр mnist.

...