将图像文件作为Tensorflow中的培训数据集加载到目录中

时间:2016-10-09 19:15:08

标签: python tensorflow

我是tensorflow的新手,我从官方的MNIST示例代码开始学习tensorflow的逻辑。但是,我感觉不太好的一件事是,MNIST示例将原始数据集提供为一些压缩文件,其格式对于初学者来说并不清楚。这种情况也适用于Cifar10,它将数据集作为二进制文件提供。我认为在实际的深度学习任务中,我们的数据集可能是许多图像文件,例如目录中的stage-3*.jpg,我们还有一个文本文件记录每个文件的标签(如ImageNet)数据集)。我以MNIST为例。

MNIST包含大小为*.png的50k个训练图像。现在让我们假设这些图像是jpg格式,并存储在目录28 x 28中。在./dataset/中,我们有一个文本文件./dataset/,用于存储每张图片的标签:

label.txt

其中/path/to/dataset/ image00001.jpg image00002.jpg ... ... ... ... image50000.jpg label.txt 是这样的:

label.txt

现在我想使用Tensorflow训练具有这些数据集的单层模型。任何人都可以帮忙提供一个简单的代码片段吗?

1 个答案:

答案 0 :(得分:3)

基本上你需要两件事。第一个是普通的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])

现在出现张量流部分

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