Tensorflow使用tfrecord输入数据格式


Posted in Python onJune 19, 2018

Tensorflow 提供了一种统一的格式来存储数据,这个格式就是TFRecord,上一篇文章中所提到的方法当数据的来源更复杂,每个样例中的信息更丰富的时候就很难有效的记录输入数据中的信息了,于是Tensorflow提供了TFRecord来统一存储数据,接下来我们就来介绍如何使用TFRecord来同意输入数据的格式。

1. TFRecord格式介绍

TFRecord文件中的数据是通过tf.train.Example Protocol Buffer的格式存储的,下面是tf.train.Example的定义

message Example {
 Features features = 1;
};

message Features{
 map<string,Feature> featrue = 1;
};

message Feature{
  oneof kind{
    BytesList bytes_list = 1;
    FloatList float_list = 2;
    Int64List int64_list = 3;
  }
};

从上述代码可以看到,ft.train.Example 的数据结构相对简洁。tf.train.Example中包含了一个从属性名称到取值的字典,其中属性名称为一个字符串,属性的取值可以为字符串(BytesList ),实数列表(FloatList )或整数列表(Int64List )。例如我们可以将解码前的图片作为字符串,图像对应的类别标号作为整数列表。

2. 将自己的数据转化为TFRecord格式

准备数据

在上一篇中,我们为了像伟大的MNIST致敬,所以选择图像的前缀来进行不同类别的分类依据,但是大多数的情况下,在进行分类任务的过程中,不同的类别都会放在不同的文件夹下,而且类别的个数往往浮动性又很大,所以针对这样的情况,我们现在利用不同类别在不同文件夹中的图像来生成TFRecord.

我们在Iris&Contact这个文件夹下有两个文件夹,分别为iris,contact。对于每个文件夹中存放的是对应的图片

转换数据

数据准备好以后,就开始准备生成TFRecord,具体代码如下:

import os 
import tensorflow as tf 
from PIL import Image 
import matplotlib.pyplot as plt 

cwd='/home/ruyiwei/Documents/Iris&Contact/'
classes={'iris','contact'} 
writer= tf.python_io.TFRecordWriter("iris_contact.tfrecords") 

for index,name in enumerate(classes):
  class_path=cwd+name+'/'
  for img_name in os.listdir(class_path): 
    img_path=class_path+img_name 
    img=Image.open(img_path)
    img= img.resize((512,80))
    img_raw=img.tobytes()
    #plt.imshow(img) # if you want to check you image,please delete '#'
    #plt.show()
    example = tf.train.Example(features=tf.train.Features(feature={
      "label": tf.train.Feature(int64_list=tf.train.Int64List(value=[index])),
      'img_raw': tf.train.Feature(bytes_list=tf.train.BytesList(value=[img_raw]))
    })) 
    writer.write(example.SerializeToString()) 

writer.close()

3. Tensorflow从TFRecord中读取数据

def read_and_decode(filename): # read iris_contact.tfrecords
  filename_queue = tf.train.string_input_producer([filename])# create a queue

  reader = tf.TFRecordReader()
  _, serialized_example = reader.read(filename_queue)#return file_name and file
  features = tf.parse_single_example(serialized_example,
                    features={
                      'label': tf.FixedLenFeature([], tf.int64),
                      'img_raw' : tf.FixedLenFeature([], tf.string),
                    })#return image and label

  img = tf.decode_raw(features['img_raw'], tf.uint8)
  img = tf.reshape(img, [512, 80, 3]) #reshape image to 512*80*3
  img = tf.cast(img, tf.float32) * (1. / 255) - 0.5 #throw img tensor
  label = tf.cast(features['label'], tf.int32) #throw label tensor
  return img, label

4. 将TFRecord中的数据保存为图片

filename_queue = tf.train.string_input_producer(["iris_contact.tfrecords"]) 
reader = tf.TFRecordReader()
_, serialized_example = reader.read(filename_queue)  #return file and file_name
features = tf.parse_single_example(serialized_example,
                  features={
                    'label': tf.FixedLenFeature([], tf.int64),
                    'img_raw' : tf.FixedLenFeature([], tf.string),
                  }) 
image = tf.decode_raw(features['img_raw'], tf.uint8)
image = tf.reshape(image, [512, 80, 3])
label = tf.cast(features['label'], tf.int32)
with tf.Session() as sess: 
  init_op = tf.initialize_all_variables()
  sess.run(init_op)
  coord=tf.train.Coordinator()
  threads= tf.train.start_queue_runners(coord=coord)
  for i in range(20):
    example, l = sess.run([image,label])#take out image and label
    img=Image.fromarray(example, 'RGB')
    img.save(cwd+str(i)+'_''Label_'+str(l)+'.jpg')#save image
    print(example, l)
  coord.request_stop()
  coord.join(threads)

以上就是本文的全部内容,希望对大家的学习有所帮助,也希望大家多多支持三水点靠木。

Python 相关文章推荐
在Python中编写数据库模块的教程
Apr 29 Python
深入理解python多进程编程
Jun 12 Python
python对excel文档去重及求和的实例
Apr 18 Python
python定时检测无响应进程并重启的实例代码
Apr 22 Python
对Python中小整数对象池和大整数对象池的使用详解
Jul 09 Python
获取Pytorch中间某一层权重或者特征的例子
Aug 17 Python
Python倒排索引之查找包含某主题或单词的文件
Nov 13 Python
python有序查找算法 二分法实例解析
Feb 18 Python
Python脚本如何在bilibili中查找弹幕发送者
Jun 04 Python
django 模型字段设置默认值代码
Jul 15 Python
python在CMD界面读取excel所有数据的示例
Sep 28 Python
Python数据可视化之绘制柱状图和条形图
May 25 Python
Tensorflow 训练自己的数据集将数据直接导入到内存
Jun 19 #Python
python如何爬取个性签名
Jun 19 #Python
详解TensorFlow查看ckpt中变量的几种方法
Jun 19 #Python
TensorFlow 滑动平均的示例代码
Jun 19 #Python
python3个性签名设计实现代码
Jun 19 #Python
TensorFlow 模型载入方法汇总(小结)
Jun 19 #Python
python3爬虫之设计签名小程序
Jun 19 #Python
You might like
ExtJS与PHP、MySQL实现存储的方法
2010/04/02 PHP
10个实用的PHP代码片段
2011/09/02 PHP
PHP中异常处理的一些方法整理
2015/07/03 PHP
PHP内存缓存功能memcached示例
2016/10/19 PHP
添加到收藏夹代码(兼容几乎所有的浏览器)
2007/01/09 Javascript
javascript中日期转换成时间戳的小例子
2013/03/21 Javascript
javascript结合ajax读取txt文件内容
2014/12/05 Javascript
js与jquery正则验证电子邮箱、手机号、邮政编码的方法
2016/07/04 Javascript
JS触发服务器控件的单击事件(详解)
2016/08/06 Javascript
JS给Array添加是否包含字符串的简单方法
2016/10/29 Javascript
Javascript中类式继承和原型式继承的实现方法和区别之处
2017/04/25 Javascript
js基于FileSaver.js 浏览器导出Excel文件的示例
2017/08/15 Javascript
javascript实现获取一个日期段内每天不同的价格(计算入住总价格)
2018/02/05 Javascript
在小程序中使用canvas的方法示例
2018/09/17 Javascript
Angular CLI 使用教程指南参考小结
2019/04/10 Javascript
JS实现动态无缝轮播
2020/01/11 Javascript
JS实现滑动拼图验证功能完整示例
2020/03/29 Javascript
python中input()与raw_input()的区别分析
2016/02/27 Python
python安装mysql-python简明笔记(ubuntu环境)
2016/06/25 Python
用Python写脚本,实现完全备份和增量备份的示例
2018/04/29 Python
python的scikit-learn将特征转成one-hot特征的方法
2018/07/10 Python
python hbase读取数据发送kafka的方法
2018/12/27 Python
Python3.5文件读与写操作经典实例详解
2019/05/01 Python
Python自带的IDE在哪里
2020/07/01 Python
详解HTML5中的元素与元素
2015/08/17 HTML / CSS
HTML利用九宫格原理进行网页布局
2020/03/13 HTML / CSS
医学院护理专业应届生求职信
2013/11/12 职场文书
园林技术专业求职信
2014/07/28 职场文书
研究生简历自我评价范文
2014/09/13 职场文书
教师拔河比赛广播稿
2014/10/14 职场文书
2015年班主任个人工作总结
2015/03/31 职场文书
2015年秋季运动会广播稿
2015/08/19 职场文书
先进教师个人主要事迹材料
2015/11/03 职场文书
Mysql 性能监控及调优
2021/04/06 MySQL
关于k8s环境部署mysql主从的问题
2022/03/13 MySQL
python对文档中元素删除,替换操作
2022/04/02 Python