更新:
2018.3.26 对于每个例子添加了详细的解释,方便理解.
做过kaggle竞赛的应该很熟悉.csv文件了,.csv文件非常方便,但是通常读取的时候,是一次性读取到内存里面的.要是内存小的话,就要想其他的办法了,那就变得很麻烦了.
或者有时候,从硬盘上面直接读取图片啊什么的,因为图片的文件格式,存放位置各种各样等等一些因素,要是想在训练阶段直接这么使用的话,就更加麻烦了.所以,对于数据进行统一的管理是很有必要的.TFRecord就是对于输入数据做统一管理的格式.加上一些多线程的处理方式,使得在训练期间对于数据管理把控的效率和舒适度都好于暴力的方法.
小的任务什么方法差别不大,但是对于大的任务,使用统一格式管理的好处就非常显著了.因此,TFRecord的使用方法很有必要熟悉.
这节并不准备将TFRcord文件的读取,只讲怎么保存为TFRecord文件,读取还涉及到其他的操作,所以之后会和其他的操作一起讲.
本文的顺序是先讲保存TFRecord文件的时候常见的API,然后再举例子在实际中怎么使用这些API.
一.重要API
Ⅰ tf.python_io.TFRecordWriter 类
把记录写入到TFRecords文件的类.
__init__
(path,options=None)
作用:创建一个
TFRecordWriter
对象,这个对象就负责写记录到指定的文件中去了.
参数:
path: TFRecords 文件路径
options: (可选) TFRecordOptions对象
close()
作用:关闭对象.
write(record)
作用:把字符串形式的记录写到文件中去.
参数:
record: 字符串,待写入的记录
Ⅱ.tf.train.Example
这个类是非常重要的,TFRecord文件中的数据都是通过tf.train.Example Protocol Buffer的格式存储的.在这里,不会非常详细的讲这个类,但是会给出常见的使用方法和一些重要函数的解释.其他的细节可以参考文档.
class tf.train.Example
属性:
features Magic attribute generated for “features” proto field.
函数:
__init__
(**kwargs)
这个函数是初始化函数,会生成一个Example对象,一般我们使用的时候,是传入一个
tf.train.Features
对象进去.
SerializeToString()
作用:把example序列化为一个字符串,因为在写入到TFRcorde的时候,write方法的参数是字符串的.
Ⅲ.tf.train.Features
class tf.train.Features
属性:
feature
函数:
__init__
(**kwargs)
作用:初始化Features对象,一般我们是传入一个字典,字典的键是一个字符串,表示名字,字典的值是一个tf.train.Feature对象.
Ⅳ.tf.train.Feature
class tf.train.Feature
属性:
bytes_list
float_list
int64_list
函数:
__init__
(**kwargs)
作用:构造一个Feature对象,一般使用的时候,传入
tf.train.Int64List
,tf.train.BytesList
,tf.train.FloatList
对象.