Как настроить набор данных изображения в тензорном потоке для CNN? - PullRequest
0 голосов
/ 08 июня 2018

У меня есть папка с изображениями на моем компьютере, но я не знаю, как настроить входной слой.Это код, который они предоставили на странице примера.Я не уверен, как внедрить мою папку в этот формат.

 def main(unused_argv):
  # Load training and eval data
  mnist = tf.contrib.learn.datasets.load_dataset("mnist")
  train_data = mnist.train.images # Returns np.array
  train_labels = np.asarray(mnist.train.labels, dtype=np.int32)
  eval_data = mnist.test.images # Returns np.array
  eval_labels = np.asarray(mnist.test.labels, dtype=np.int32)

1 Ответ

0 голосов
/ 08 июня 2018

Вам необходимо преобразовать ваши изображения в папках в векторы (набор чисел) для подачи в сеть.

В приведенном выше примере mnist вы фактически используете сжатую двоичную версию изображений.Поэтому с вашей стороны предварительная обработка не требуется (за исключением масштабирования пикселей в диапазоне от 0 до 1).

Предположим, у вас есть изображение с RGB-именем orig.jpg в текущем рабочем каталоге.

Вызагрузит это изображение как

import numpy as np 
from PIL import Image 
img = Image.open('orig.jpg').convert('RGB')
img = np.array(img)

. Это даст вам все содержимое изображения в виде чисел для переменной массива numpy.img в данном случае.

Исходя из вашего вопроса, вы реализуете нейронную сеть Convolution, поэтому вам не нужно сводить переменную img к одномерному вектору.

Вы можете проверить форму переменной, выполнив

np.shape(img)

Обычно форма будет иметь вид (lenght, width, 3)

Один последний шаг перед тем, как тренировать свою модель с помощьюВозможно, вам понадобится нормализовать значения RGB.Вы можете сделать это, разделив img на 255. Это обычно улучшает ваш алгоритм оптимизации

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

for filename in os.listdir(directory_name):
    if filename.endswith(".jpg"):  
         # code to extract the values using os.path.join(directory_name,filename)

Полный код для итерации и сохранения всех изображений с .jpg в np.array выглядит следующим образом.

from PIL import Image
import numpy as np
import os.path

length = 128 # pixels in length
width = 128 # pixels in width


imgs = np.empty((0,length, width, 3)) #empty dummy array, we will append to this array all the images
for filename in os.listdir(directory_name):
    if filename.endswith(".jpg"):
        img = Image.open(os.path.join(directory_name,filename)).convert('RGB')
        imgs = np.append(imgs, np.array(img).reshape((1, length, width, 3)), axis=0)

После завершения цикла,imgs будет иметь форму (num_image, length, width, 3)

Теперь вы можете использовать это imgs и построить некоторый входной конвейер с помощью tf.data.Dataset.from_tensor_slices(....), или вы можете напрямую использовать imgs

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