Я строю свою первую нейронную сеть, взяв за основу те, что описаны в книге «Глубокое обучение с помощью Python — Франсуа Шолле», и сразу же нашел свою первую проблему. Когда автор импортировал набор данных MNIST, он также напечатал форму, получив 1D-тензор. Я пытаюсь импортировать папку, содержащую все изображения кэдди, чтобы проверить, правильно ли их каталогизирует NN. Проблема в том, что я не могу получить одномерный тензор из всех этих изображений. Я пытался преобразовать каждый из них с помощью numpy.asarray(my_image)
. Я также пытался преобразовать весь список, но оказалось, что он стал кортежем... есть подсказка?
train_label = 'Caddies'
train_images = list()
for filename in listdir('/content/drive/MyDrive/Data set/Caddies/'):
img_data = image.imread('/content/drive/MyDrive/Data set/Caddies/' +\
filename)
img_data = np.asarray(img_data)
#print(str(img_data.dtype) + str(img_data.shape))
train_images.append(img_data)
print('> loaded %s images' % (len(train_images)))
train_images = np.array(train_images)
print(train_images.shape())
Если вы хотите передать свои изображения в нейронную сеть, я предлагаю вам не использовать цикл for для загрузки всех ваших изображений в память. Вместо этого вы можете использовать эту функцию:
import tensorflow as tf
import os
os.chdir('pictures')
files = tf.data.Dataset.list_files('*jpg')
def load_images(path):
image = tf.io.read_file(path)
image = tf.io.decode_jpeg(image)
image = tf.image.convert_image_dtype(image, tf.float32) # optional
image = tf.image.resize(image, (224, 224)) # optional
return image
ds = files.map(load_images).batch(1)
next(iter(ds)).shape
(1, 224, 224, 3)
Это работает, но, честно говоря, я не совсем понимаю, что делает весь код. Можешь пожалуйста объяснить? Особенно последние инструкции: ds = files.map... и next(iter(ds))...
Отвечает ли это на ваш вопрос? Преобразование изображения ( png ) в матрицу, а затем в массив 1D