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

C. *_*ang 12 python tensorflow

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

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

/path/to/dataset/
                 image00001.jpg
                 image00002.jpg
                 ... ... ... ...
                 image50000.jpg
                 label.txt
Run Code Online (Sandbox Code Playgroud)

label.txt是这样的:

#label.txt:
image00001.jpg 1
image00002.jpg 0
image00003.jpg 4
image00004.jpg 9
... ... ... ... 
image50000.jpg 3
Run Code Online (Sandbox Code Playgroud)

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

Ste*_*ven 5

基本上有两件事你需要。第一个是普通的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])
Run Code Online (Sandbox Code Playgroud)

现在是张量流部分

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})
Run Code Online (Sandbox Code Playgroud)