Tensorflow学习笔记-通过slim读取TFRecord文件
2018-03-13 17:47
736 查看
TFRecord文件格式的介绍:http://blog.csdn.net/lovelyaiq/article/details/78711944
由于slim是tensorflow的高级API,使用起来比较方便,例如在卷积或全连接层的书写时,可以大大减少代码量。使用slim读取TFRecord文件与tensorflow直接读取还是有很大的却别。
本文就以slim中的例子的flowers来说明。tfrecord中的格式定义为:
原始图像经过处理后,生成5个文件。flowers_train_00000-of-00005.tfrecord到flowers_train_00004-of-00005.tfrecord。
训练时,就要通过slim从这5个文件中读取数据,然后组合成batch。代码如下:
至此,就可以使用images作为神经网络的输入,使用labels计算损失函数等操作。
由于slim是tensorflow的高级API,使用起来比较方便,例如在卷积或全连接层的书写时,可以大大减少代码量。使用slim读取TFRecord文件与tensorflow直接读取还是有很大的却别。
本文就以slim中的例子的flowers来说明。tfrecord中的格式定义为:
image_data = image_data = tf.gfile.FastGFile('img_path', 'rb').read() def image_to_tfexample(image_data, image_format, height, width, class_id): return tf.train.Example(features=tf.train.Features(feature={ 'image/encoded': bytes_feature(image_data), 'image/format': bytes_feature(image_format), 'image/class/label': int64_feature(class_id), 'image/height': int64_feature(height), 'image/width': int64_feature(width), }))
原始图像经过处理后,生成5个文件。flowers_train_00000-of-00005.tfrecord到flowers_train_00004-of-00005.tfrecord。
训练时,就要通过slim从这5个文件中读取数据,然后组合成batch。代码如下:
# 第一步 # 将example反序列化成存储之前的格式。由tf完成 keys_to_features = { 'image/encoded': tf.FixedLenFeature((), tf.string, default_value=''), 'image/format': tf.FixedLenFeature((), tf.string, default_value='png'), 'image/class/label': tf.FixedLenFeature( [], tf.int64, default_value=tf.zeros([], dtype=tf.int64)), } # 第一步 # 将反序列化的数据组装成更高级的格式。由slim完成 items_to_handlers = { 'image': slim.tfexample_decoder.Image('image/encoded','image/format'), 'label': slim.tfexample_decoder.Tensor('image/class/label'), } # 解码器,进行解码 decoder = slim.tfexample_decoder.TFExampleDecoder( keys_to_features, items_to_handlers) # dataset对象定义了数据集的文件位置,解码方式等元信息 dataset = slim.dataset.Dataset( data_sources=file_pattern, reader=tf.TFRecordReader, decoder=decoder, num_samples=SPLITS_TO_SIZES[split_name],#训练数据的总数 items_to_descriptions=_ITEMS_TO_DESCRIPTIONS, num_classes=_NUM_CLASSES, labels_to_names=labels_to_names #字典形式,格式为:id:class_call, ) # provider对象根据dataset信息读取数据 provider = slim.dataset_data_provider.DatasetDataProvider( dataset, num_readers=FLAGS.num_readers, common_queue_capacity=20 * FLAGS.batch_size, common_queue_min=10 * FLAGS.batch_size) # 获取数据,获取到的数据是单个数据,还需要对数据进行预处理,组合数据 [image, label] = provider.get(['image', 'label']) # 图像预处理 image = image_preprocessing_fn(image, train_image_size, train_image_size) images, labels = tf.train.batch( [image, label], batch_size=FLAGS.batch_size, num_threads=FLAGS.num_preprocessing_threads, capacity=5 * FLAGS.batch_size) labels = bb09 slim.one_hot_encoding( labels, dataset.num_classes - FLAGS.labels_offset) batch_queue = slim.prefetch_queue.prefetch_queue( [images, labels], capacity=2 * deploy_config.num_clones) # 组好后的数据 images, labels = batch_queue.dequeue()
至此,就可以使用images作为神经网络的输入,使用labels计算损失函数等操作。
相关文章推荐
- Tensorflow学习笔记之用TF读取csv文件的限制
- TensorFlow学习(十一):保存TFRecord文件
- 如何用Tensorflow训练模型成pb文件(二)——基于tfrecord的读取
- tensorflow中的TFRecord格式文件的写入和读取
- Tensorflow教程学习笔记(一)----将自己的数据集转换成TFRecord
- TensorFlow学习记录-- 7.TensorFlow高效读取数据之tfrecord详细解读
- TensorFlow 学习(二) 制作自己的TFRecord数据集,读取,显示及代码详解
- 学习笔记:csv文件的读取和tf.contrib.learn Quickstart
- 0702学习笔记提示和传递和文件读取读写1
- nginx 源码学习笔记(十三)——文件读写和配置文件读取
- 黑马程序员之C#学习笔记:C#读取txt文件的方法
- Hadoop Core 学习笔记(一) SequenceFile文件写入和读取Writable数据
- node.js 学习笔记四:读取文件
- 学习笔记之cocos2d-x2.1.1实现读取.plist文件(使用数组CCArray)
- 黑马程序员之C#学习笔记: xml文件读取
- Java学习笔记——文件读取技术
- QT sqlite3数据库读取、容器操作、文件读写——学习笔记。
- java学习笔记_将中文字符导出txt文档_从txt文档读取文件
- Android开发学习笔记(12):Android读取内部以及外部资源文件(更新中...)
- Cocoa2d-X学习笔记第二篇:通过include文件看看源码构架