我是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训练具有这些数据集的单层模型。任何人都可以帮忙提供一个简单的代码片段吗?
答案 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})