为啥要用tfrecord
使用tfrecord是为了更高效地读取数据,这种方式比较适合数据量大且数据集相对稳定的情况。tfrecord将数据存储成了二进制记录序列的格式,这格式比较对计算机的胃口,读取更高效一些。
如果只是训练一点点数据,没必要存成tfrecord,因为这样带来的效率提升不够显著。
如果数据集里面的样本和标签时常有变动,也不太适合用tfrecord格式。因为数据集中样本和标签经常变动,可能是因为对任务的目标定位不够明确、数据集不够干净。这些数据存储成图片格式,方便进行查看和必要的改动。但存储成tfrecord格式,人工查看就不是很方便了。若是数据集较为干净、且任务定义明确,只是数据量在不断增长,还是比较适合存储成tfrecord的。
怎么制作tfrecord呢?
感觉有些复杂,为啥呢?因为制作tfrecord,数据大部分要经过2步转换。如下图所示,想存入tfrecord的数据,不管是数值、字符串还是图片,都得先变成正规军tf.train.Feature格式的数据。然后多个由关键字(string类型)和对应tf.train.Feature组成的字典生成tf.Example, 然后再序列化成二进制字符串,存储到文件中,大功告成。
真是太复杂了,为啥不能只输入一个路径,然后tensorflow自己分析里面有啥,然后存到tfrecord呢?(白日做梦)
现在就来实现以下这个过程。