Tensorflow-制作与使用tfrecord数据集
引言
本次博文目的是记录下tfrecord数据集的制作与使用方式。(踩了无数坑OTZ)
这里贴上一个数据读取的官方教程:Tensorflow导入数据以及使用数据
接下来举个例子说明怎么用tfrecord,假设我要做个图片分类的任务。首先,我这里有一个txt文件,包含着所有图片的路径以及它们的标签。还有一个包含许多图片的文件夹。类似下图这样:
准备好了数据后,就可以制作与使用TFrecored啦~
制作TFrecord
当然是先写个制作TFrecord的函数啦。我们先读取图片信息的txt文件,得到每个图片的路径以及它们的标签,然后对这个图片作一些预处理,最后将图片以及它对应的标签序列化,并建立图片和标签的索引(即以下代码的”img_raw”, “label”)。详见代码。
import random import tensorflow as tf from PIL import Imagedef create_record(records_path, data_path, img_txt):# 声明一个TFRecordWriterwriter = tf.python_io.TFRecordWriter(records_path)# 读取图片信息,并且将读入的图片顺序打乱img_list = []with open(img_txt, 'r') as fr:img_list = fr.readlines()random.shuffle(img_list)cnt = 0# 遍历每一张图片信息for img_info in img_list:# 图片相对路径img_name = img_info.split(' ')[0]# 图片类别img_cls = int(img_info.split(' ')[1])img_path = data_path + img_nameimg = Image.open(img_path)# 对图片进行预处理(缩放,减去均值,二值化等等)img = img.resize((128, 128))img_raw = img.tobytes()# 声明将要写入tfrecord的key值(即图片,标签)example = tf.train.Example(features=tf.train.Features(feature={"label": tf.train.Feature(int64_list=tf.train.Int64List(value=[img_cls])),'img_raw': tf.train.Feature(bytes_list=tf.train.BytesList(value=[img_raw]))}))# 将信息写入指定路径writer.write(example.SerializeToString())# 打印一些提示信息~cnt += 1if cnt % 1000 == 0:print "processed %d images" % cntwriter.close()# 指定你想要生成tfrecord名称,图片文件夹路径,含有图片信息的txt文件 records_path = '/the/name/of/your/haha.tfrecords' data_path = '/the/root/of/your/image_folder/' img_txt = '/image/labels/list.txt' create_record(records_path, data_path, img_txt)使用TFrecord
目前为止,使用TFrecord最方便的方式是用TensorFlow的Dataset ApI。在这里,劝大家千万千万不要用queue的方式读取数据(麻烦且已经过时)。
首先,我们定义好_parse_function,这个函数是用来指定TFrecord中索引的(即上文中的”img_raw”, “label”)。然后我们定义一个TFRecordDataset,并借助_parse_function来读取数据。最后,为了得到每一轮的训练数据,我们只需要再额外声明一个iterator,每次调用get_next()就可以啦。
再聊聊TensorFlow的Slim模块
这篇文章本该到此结束的。但是我仍想说TensorFlow真的有点难用(也可能是我太弱哈哈)。主要原因是它的API太多,更新速度太快。不过,我们也能迅速学习到许多东西(毕竟它的支持者有很多,这就给我们提供了许多实例以及讲解博文),比如这个关于Slim的学习例子。
接下来聊聊Slim这个模块,它是2016年出的新模块,目的是减少构建网络的代码量。个人觉得真是很好用,强烈推荐一试!!!(不信可以去上面网址里看看)好的,下面贴一段代码,展示下slim的使用方式,作为本篇的结尾吧~
总结
以上是生活随笔为你收集整理的Tensorflow-制作与使用tfrecord数据集的全部内容,希望文章能够帮你解决所遇到的问题。
- 上一篇: AppBarLayout.Behavio
- 下一篇: 字节序Endian与字节序标记BOM详解