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

Я только начал изучать машинное обучение и использую Tensorflow 1.14. Я только что создал свою первую модель, используя tensorflow.keras, используя встроенный набор данных tensorflow.keras.datasets.mnist. Вот код для моей модели:

import tensorflow as tf
from tensorflow import keras

mnist = keras.datasets.mnist
(x_train, y_train), (x_test, y_test) = mnist.load_data()

class Stopper(keras.callbacks.Callback):
    def on_epoch_end(self, epoch, log={}):
        if log.get('acc') >= 0.99:
            self.model.stop_training = True
            print('\nReached 99% Accuracy. Stopping Training...')

model = keras.Sequential([
    keras.layers.Flatten(),
    keras.layers.Dense(1024, activation=tf.nn.relu),
    keras.layers.Dense(10, activation=tf.nn.softmax)])

model.compile(
    optimizer=tf.train.AdamOptimizer(),
    loss='sparse_categorical_crossentropy',
    metrics=['accuracy'])

x_train, x_test = x_train / 255, x_test / 255

model.fit(x_train, y_train, epochs=10, callbacks=[Stopper()])

Теперь, когда модель обучена, я могу передать x_test изображения в model.predict(), и это прекрасно работает. Но мне было интересно, как передать мои собственные изображения (JPG и PNG) в метод моей модели predict()?

Я посмотрел документацию , и их метод привел к ошибке для меня. В частности, я попробовал следующее:

img_raw = tf.read_file(<my file path>)
img_tensor = tf.image.decode_image(img_raw)
img_final = tf.image.resize(img_tensor, [192, 192])
^^^ This line throws error 'ValueError: 'images' contains no shape.'

Пожалуйста, предоставьте пошаговое руководство для получения изображения (JPG и PNG) в моей модели для прогноза. Большое спасибо.

Ответы [ 2 ]

0 голосов
/ 11 июля 2019
from PIL import Image
img = Image.open("image_file_path").convert('L').resize((28, 28), Image.ANTIALIAS)
img = np.array(img)
model.predict(img[None,:,:])

Вы тренировали свою модель с изображениями размером (28 х 28), поэтому необходимо изменить размер изображения до того же.Вы не можете использовать изображения другого измерения.

Для прогнозирования требуется пакет изображений, но, поскольку вы хотите сделать прогноз для одного изображения, вам необходимо добавить дополнительное измерение пакета для этого отдельного изображения.Это делается expand_dim или reshape или img[None,:,:]

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

Каждое изображение в основном состоит из пикселей, вы можете передать эти значения пикселей в вашу нейронную сеть.

Чтобы преобразовать изображение в массив пикселей, вы можете использовать такие библиотеки, как skimage, следующим образом.

from skimage.io import imread
imagedata=imread(imagepath)
#you can pass this image to the model

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

resized_image = imagedata.resize(preferred_width, preferred_height, Image.ANTIALIAS)     

Вы также можете выбрать преобразование изображения в черно-белое, чтобы уменьшить количество вычислений, я использую подушкубиблиотека, общая библиотека предварительной обработки изображений здесь для применения черно-белого фильтра

from PIL import Image
# load the image
image = Image.open('opera_house.jpg')
# convert the image to grayscale
gs_image = image.convert(mode='L')

Порядок предварительной обработки может быть

1. convert images to black and white 
2. resize the images
3. convert them into numpy array using imread  
...