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