temsorflow数据读取机制
TFRecords
-
优点:TFRecords其实是一种二进制文件,能更好的利用内存,更方便复制和移动,因为图像和标注可以存储在一起,避免了从硬盘上打开文件再进行数据读取的时间,因而更高效
-
缺点:不如其他格式好理解
-
读:从TFRecords文件中读取数据, 可以使用tf.TFRecordReader的tf.parse_single_example解析器。这个操作可以将Example协议内存块(protocol buffer)解析为张量。
-
写:TFRecords文件包含了tf.train.Example 协议内存块(protocol buffer)(协议内存块包含了字段 Features)。我们可以写一段代码获取你的数据, 将数据填入到Example协议内存块(protocol buffer),将协议内存块序列化为一个字符串, 并且通过tf.python_io.TFRecordWriter 写入到TFRecords文件。
读写TFRecords数据的例子、迭代器、dataset的介绍
将数据转化为tf.Example要求的3种类型
tf.train.BytesList/tf.train.FloatList/tf.train.Int64List
十图详解tensorflow数据读取机制
介绍了tf的文件名队列和内存队列模式
tf.train.string_input_producer(string_tensor, num_epochs=None, shuffle=True, seed=None, capacity=32, shared_name=None, name=None, cancel_op=None) 负责创建一个文件名队列 输入为tfrecord,创建的是tfrecord的队列 输入是文件名,创建的是文件名队列
num_epochs : epoch的数目
shuffle:在一个epoch是否随机打乱顺序
capacity : 队列容量,数据有出有进,所以可以不用设置太大,保持默认就可以
内存队列不需要我们创建,只需要使用reader对象从文件名队列中读取数据就可以
此时文件名队列和内存队列还没有数据,采用tf.train.start_queue_runners
启动填充队列的线程
【TensorFlow动手玩】队列
介绍了队列管理器、线程、coordinator
tensorflow中关于队列使用的实验
入队操作是从硬盘中读取数据,放到内存当中,速度较慢,当在主线程中执行数据读取和数据处理时,两个任务串行进行,入队后才可以处理数据,而采用QueueRunner
可以创建一系列新的线程进行入队操作,而主线程处理数据,在神经网络的训练中,数据处理和数据读取就是异步执行的,主线程处理数据,另一个线程读取数据。
运行相关代码,可更好地理解线程和队列
FIFOQueue和RandomShuffleQueue两种队列
tensorflow入门:tfrecord 和tf.data.TFRecordDataset
介绍了TFread数据保存和读取
tips:
tf.TFRecordReader VS tf.data.TFRecordDataset
tf.TFRecordReader()可能会弃用,官方推荐用tf.data读取TFRecord
dataset Iterator
创建一个迭代器保证每次可以获取到一batch的数据
- one shot iterator 即只能从头到尾读取一次
dataset = dataset.shuffle(buffersize=1000).batch(32).repeat(10)
是将一个epoch打乱的数值重复10次