Загрузка файлов изображений в каталог как набора данных для обучения в Tensorflow

#python #tensorflow

#python #tensorflow

Вопрос:

Я новичок в tensorflow, и я начинаю с официального примера кода MNIST, чтобы изучить логику tensorflow. Однако одна вещь, которую я не чувствовал, это то, что пример MNIST предоставляет исходный набор данных в виде некоторых сжатых файлов, формат которых непонятен новичкам. Этот случай также связан с Cifar10, который предоставляет набор данных в виде двоичного файла. Я думаю, что в практической задаче глубокого обучения наш набор данных может состоять из множества файлов изображений, таких как *.jpg или *.png в каталоге, и у нас также есть текстовый файл, записывающий метку каждого файла (например, ImageNet dataset). Позвольте мне использовать MNIST в качестве примера.

MNIST содержит обучающие изображения размером 28 x 28 50 тыс. Теперь давайте предположим, что эти изображения в формате jpg и хранятся в каталоге ./dataset/ . У ./dataset/ нас есть текстовый файл label.txt , в котором хранится метка каждого изображения:

 /path/to/dataset/
                 image00001.jpg
                 image00002.jpg
                 ... ... ... ...
                 image50000.jpg
                 label.txt
  

где label.txt это так:

 #label.txt:
image00001.jpg 1
image00002.jpg 0
image00003.jpg 4
image00004.jpg 9
... ... ... ... 
image50000.jpg 3
  

Теперь я хотел бы использовать Tensorflow для обучения однослойной модели с этим набором данных. Кто-нибудь может помочь дать простой фрагмент кода для этого?

Ответ №1:

В основном вам понадобятся две вещи. Первый — это обычный код python, например:

 import numpy as np
from scipy import misc # feel free to use another image loader

def create_batches(batch_size):
  images = []
  for img in list_of_images:
    images.append(misc.imread(img))
  images = np.asarray(images)

  #do something similar for the labels

  while (True):
    for i in range(0,total,batch_size):
      yield(images[i:i batch_size],labels[i:i batch_size])
  

теперь идет часть tensorflow

 imgs = tf.placeholder(tf.float32,shape=[None,height,width,colors])
lbls = tf.placeholder(tf.int32, shape=[None,label_dimension])

with tf.Session() as sess:
#define rest of graph here
# convolutions or linear layers and cost function etc.


  batch_generator = create_batches(batch_size)
  for i in range(number_of_epochs):
    images, labels = batch_generator.next()
    loss_value = sess.run([loss], feed_dict={imgs:images, lbls:labels})