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脚本暴力破解栅栏密码
Oct 19 Python
Python编程之gui程序实现简单文件浏览器代码
Dec 08 Python
Python OpenCV实现图片上输出中文
Jan 22 Python
78行Python代码实现现微信撤回消息功能
Jul 26 Python
基于python的Paxos算法实现
Jul 03 Python
PyQt5中多线程模块QThread使用方法的实现
Jan 31 Python
python实现连连看游戏
Feb 14 Python
python3+openCV 获取图片中文本区域的最小外接矩形实例
Jun 02 Python
python 实现图像快速替换某种颜色
Jun 04 Python
python 使用OpenCV进行简单的人像分割与合成
Feb 02 Python
Python基础之常用库常用方法整理
Apr 30 Python
利用Python判断你的密码难度等级
Jun 02 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
php批量缩放图片的代码[ini参数控制]
2011/02/11 PHP
php学习笔记 数组遍历实现代码
2011/06/09 PHP
分割GBK中文遭遇乱码的解决方法
2013/08/09 PHP
php在线解压ZIP文件的方法
2014/12/30 PHP
php反射学习之不用new方法实例化类操作示例
2019/06/14 PHP
从Ajax到JQuery Ajax学习
2007/02/14 Javascript
详解JavaScript中Hash Map映射结构的实现
2016/05/21 Javascript
JavaScript中自带的 reduce()方法使用示例详解
2016/08/10 Javascript
浅谈JS函数节流防抖
2017/10/18 Javascript
vue router下的html5 history在iis服务器上的设置方法
2017/10/18 Javascript
JS小球抛物线轨迹运动的两种实现方法详解
2017/12/20 Javascript
9种使用Chrome Firefox 自带调试工具调试javascript技巧
2017/12/22 Javascript
小程序实现图片预览裁剪插件
2019/11/22 Javascript
Node.js API详解之 dgram模块用法实例分析
2020/06/05 Javascript
react antd表格中渲染一张或多张图片的实例
2020/10/28 Javascript
python实现一个简单的并查集的示例代码
2018/03/19 Python
python使用KNN算法识别手写数字
2019/04/25 Python
Python实现扫码工具的示例代码
2020/10/09 Python
Python实现迪杰斯特拉算法并生成最短路径的示例代码
2020/12/01 Python
call在Python中改进数列的实例讲解
2020/12/09 Python
AE美国鹰日本官方网站: American Eagle Outfitters
2016/12/10 全球购物
屈臣氏菲律宾官网:Watsons菲律宾
2020/06/30 全球购物
心理健康教育心得体会
2013/12/29 职场文书
2014国培学习感言
2014/03/05 职场文书
母婴店促销方案
2014/03/05 职场文书
现金出纳岗位职责
2014/03/15 职场文书
公司门卫工作职责
2014/06/28 职场文书
运动会广播稿200字
2014/10/18 职场文书
贫困生助学金感谢信
2015/01/21 职场文书
2015年平安创建工作总结
2015/04/29 职场文书
英语专业毕业论文答辩开场白
2015/05/27 职场文书
董事长致辞
2015/07/29 职场文书
导游词之苏州阳澄湖
2019/11/15 职场文书
WINDOWS下安装mysql 8.x 的方法图文教程
2022/04/19 MySQL
PHP RabbitMQ消息列队
2022/05/11 PHP