#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})