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判断IP地址合法性的方法实例
Mar 13 Python
通过数据库向Django模型添加字段的示例
Jul 21 Python
利用 Monkey 命令操作屏幕快速滑动
Dec 07 Python
python实现远程通过网络邮件控制计算机重启或关机
Feb 22 Python
和孩子一起学习python之变量命名规则
May 27 Python
Python3 Post登录并且保存cookie登录其他页面的方法
Dec 28 Python
python tools实现视频的每一帧提取并保存
Mar 20 Python
创建Django项目图文实例详解
Jun 06 Python
python ChainMap 合并字典的实现步骤
Jun 11 Python
使用Python对Dicom文件进行读取与写入的实现
Apr 20 Python
python绘制汉诺塔
Mar 01 Python
python 实现的截屏工具
May 08 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
PHP5.0对象模型探索之抽象方法和抽象类
2006/09/05 PHP
ThinkPHP3.2框架自定义配置和加载用法示例
2018/06/14 PHP
thinkphp诸多限制条件下如何getshell详解
2020/12/09 PHP
使用JavaScript实现Java的List功能(实例讲解)
2013/11/07 Javascript
javascript history对象(历史记录)使用方法(实现浏览器前进后退)
2014/01/07 Javascript
javascript if条件判断方法小结
2014/05/17 Javascript
javascript父、子页面交互技巧总结
2014/08/08 Javascript
jQuery实现仿QQ头像闪烁效果的文字闪动提示代码
2015/11/03 Javascript
使用pcs api往免费的百度网盘上传下载文件的方法
2016/03/17 Javascript
移动端横屏的JS代码(beta)
2016/05/16 Javascript
轻松掌握JavaScript享元模式
2016/08/27 Javascript
用JS动态设置CSS样式常见方法小结(推荐)
2016/11/10 Javascript
js 动态生成html 触发事件传参字符转义的实例
2017/02/14 Javascript
浅谈js中用$(#ID)来作为选择器的问题(id重复的时候)
2017/02/14 Javascript
JavaScript数组的5种迭代方法
2017/09/29 Javascript
ES6中Class类的静态方法实例小结
2017/10/28 Javascript
jQuery实现新闻播报滚动及淡入淡出效果示例
2018/03/23 jQuery
vuex(vue状态管理)的特殊应用案例分享
2020/03/03 Javascript
vue实现div单选多选功能
2020/07/16 Javascript
Python编程实战之Oracle数据库操作示例
2017/06/21 Python
flask框架视图函数用法示例
2018/07/19 Python
python3基于TCP实现CS架构文件传输
2018/07/28 Python
Windows下python3.6.4安装教程
2018/07/31 Python
在cmder下安装ipython以及环境的搭建
2018/10/19 Python
Python 实现交换矩阵的行示例
2019/06/26 Python
运行Python编写的程序方法实例
2020/10/21 Python
Kipling凯浦林美国官网:世界著名时尚休闲包袋品牌
2016/08/24 全球购物
Paradigit比利时电脑卖场:购买笔记本、电脑、平板和外围设备
2016/11/28 全球购物
西班牙香水和化妆品网上商店:Douglas
2017/10/29 全球购物
开业庆典邀请函
2014/01/08 职场文书
北京大学自荐信范文
2014/01/28 职场文书
规划编制实施方案
2014/03/15 职场文书
祖国在我心中演讲稿600字
2014/05/04 职场文书
莫言诺贝尔获奖演讲稿
2014/05/21 职场文书
国家助学贷款承诺书
2015/04/30 职场文书
python的变量和简单数字类型详解
2021/09/15 Python