利用Tensorflow的队列多线程读取数据

本文详细介绍了如何使用Tensorflow的队列和多线程技术高效读取与预处理图像数据,包括预加载数据、图像预处理、填充队列、随机打乱、激活队列和处理异常等步骤,适用于大规模数据集的训练过程。
摘要由CSDN通过智能技术生成


利用Tensorflow的队列多线程读取数据

在tensorflow中,有三种方式输入数据
1.利用feed_dict送入numpy数组
2.利用队列从文件中直接读取数据

3.预加载数据


其中第一种方式很常用,在tensorflow的MNIST训练源码中可以看到,通过feed_dict={},可以将任意数据送入tensor中。


第二种方式相比于第一种,速度更快,可以利用多线程的优势把数据送入队列,再以batch的方式出队,并且在这个过程中可以很方便地对图像进行随机裁剪、翻转、改变对比度等预处理,同时可以选择是否对数据随机打乱,可以说是非常方便。该部分的源码在tensorflow官方的CIFAR-10训练源码中可以看到,但是对于刚学习tensorflow的人来说,比较难以理解:

1.使用tf.train.string_input_producer函数把我们需要的全部文件打包为一个tf内部的queue类型,之后tf开文件就从这个queue中取目录了,要注意一点的是这个函数的shuffle参数默认是True,也就是你传给他文件顺序是1234,但是到时候读就不一定了,我一开始每次跑训练第一次迭代的样本都不一样,还纳闷了好久,就是这个原因。



首先,把CIFAR-10的测试集文件读取出来,生成文件名列表。

path = 'E:\Dataset\cifar-10\cifar-10-batches-py'
filenames = [os.path.join(path, 'data_batch_%d' % i) for i in range(1, 6)]

"""

os.path.join()函数

语法:  os.path.join(path1[,path2[,......]])

返回值:将多个路径组合后返回

注:第一个绝对路径之前的参数将被忽略


#合并目录
 
>>>  import  os
>>> os.path.join( '/hello/' , 'good/boy/' , 'doiido' )
'/hello/good/boy/doiido'

"""








有了列表以后,利用tf.train.string_input_producer函数生成一个读取队列

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值