使用TFRecord存取多个数据案例


Posted in Python onFebruary 17, 2020

TensorFlow提供了一种统一的格式来存储数据,就是TFRecord,它可以统一不同的原始数据格式,并且更加有效地管理不同的属性。

TFRecord格式

TFRecord文件中的数据都是用tf.train.Example Protocol Buffer的格式来存储的,tf.train.Example可以被定义为:

message Example{
  Features features = 1
}

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

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

可以看出Example是一个嵌套的数据结构,其中属性名称可以为一个字符串,其取值可以是字符串BytesList、实数列表FloatList或整数列表Int64List。

将数据转化为TFRecord格式

以下代码是将MNIST输入数据转化为TFRecord格式:

# -*- coding: utf-8 -*-

import tensorflow as tf
from tensorflow.examples.tutorials.mnist import input_data
import numpy as np


# 生成整数型的属性
def _int64_feature(value):
  return tf.train.Feature(int64_list=tf.train.Int64List(value=[value]))

# 生成浮点型的属性
def _float_feature(value):
  return tf.train.Feature(float_list=tf.train.FloatList(value=[value]))  
#若想保存为数组,则要改成value=value即可


# 生成字符串型的属性
def _bytes_feature(value):
  return tf.train.Feature(bytes_list=tf.train.BytesList(value=[value]))


mnist = input_data.read_data_sets("/tensorflow_google", dtype=tf.uint8, one_hot=True)
images = mnist.train.images
# 训练数据所对应的正确答案,可以作为一个属性保存在TFRecord中
labels = mnist.train.labels
# 训练数据的图像分辨率,这可以作为Example中的一个属性
pixels = images.shape[1]
num_examples = mnist.train.num_examples

# 输出TFRecord文件的地址
filename = "/tensorflow_google/mnist_output.tfrecords"
# 创建一个writer来写TFRecord文件
writer = tf.python_io.TFRecordWriter(filename)
for index in range(num_examples):
  # 将图像矩阵转换成一个字符串
  image_raw = images[index].tostring()
  # 将一个样例转化为Example Protocol Buffer, 并将所有的信息写入这个数据结构
  example = tf.train.Example(features=tf.train.Features(feature={
    'pixels': _int64_feature(pixels),
    'label': _int64_feature(np.argmax(labels[index])),
    'image_raw': _bytes_feature(image_raw)}))

  # 将一个Example写入TFRecord文件
  writer.write(example.SerializeToString())
writer.close()

本程序将MNIST数据集中所有的训练数据存储到了一个TFRecord文件中,若数据量较大,也可以存入多个文件。

从TFRecord文件中读取数据

以下代码可以从上面代码中的TFRecord中读取单个或多个训练数据:

# -*- coding: utf-8 -*-
import tensorflow as tf

# 创建一个reader来读取TFRecord文件中的样例
reader = tf.TFRecordReader()
# 创建一个队列来维护输入文件列表
filename_queue = tf.train.string_input_producer(["/Users/gaoyue/文档/Program/tensorflow_google/chapter7"
                         "/mnist_output.tfrecords"])

# 从文件中读出一个样例,也可以使用read_up_to函数一次性读取多个样例
# _, serialized_example = reader.read(filename_queue)
_, serialized_example = reader.read_up_to(filename_queue, 6) #读取6个样例
# 解析读入的一个样例,如果需要解析多个样例,可以用parse_example函数
# features = tf.parse_single_example(serialized_example, features={
# 解析多个样例
features = tf.parse_example(serialized_example, features={
  # TensorFlow提供两种不同的属性解析方法
  # 第一种是tf.FixedLenFeature,得到的解析结果为Tensor
  # 第二种是tf.VarLenFeature,得到的解析结果为SparseTensor,用于处理稀疏数据
  # 解析数据的格式需要与写入数据的格式一致
  'image_raw': tf.FixedLenFeature([], tf.string),
  'pixels': tf.FixedLenFeature([], tf.int64),
  'label': tf.FixedLenFeature([], tf.int64),
})

# tf.decode_raw可以将字符串解析成图像对应的像素数组
images = tf.decode_raw(features['image_raw'], tf.uint8)
labels = tf.cast(features['label'], tf.int32)
pixels = tf.cast(features['pixels'], tf.int32)

sess = tf.Session()
# 启动多线程处理输入数据
coord = tf.train.Coordinator()
threads = tf.train.start_queue_runners(sess=sess, coord=coord)

# 每次运行可以读取TFRecord中的一个样例,当所有样例都读完之后,会重头读取
# for i in range(10):
#   image, label, pixel = sess.run([images, labels, pixels])
#   # print(image, label, pixel)
#   print(label, pixel)

# 读取TFRecord中的前6个样例,若加入循环,则会每次从上次输出的地方继续顺序读6个样例
image, label, pixel = sess.run([images, labels, pixels])
print(label, pixel)

sess.close()

>> [7 3 4 6 1 8] [784 784 784 784 784 784]

输出结果显示,从TFRecord文件中顺序读出前6个样例。

以上这篇使用TFRecord存取多个数据案例就是小编分享给大家的全部内容了,希望能给大家一个参考,也希望大家多多支持三水点靠木。

Python 相关文章推荐
Python3操作SQL Server数据库(实例讲解)
Oct 21 Python
python正则表达式re之compile函数解析
Oct 25 Python
Python实现的读取电脑硬件信息功能示例
May 30 Python
利用python将图片版PDF转文字版PDF
May 03 Python
OpenCV搞定腾讯滑块验证码的实现代码
May 18 Python
使用Python实现跳帧截取视频帧
May 31 Python
python画图——实现在图上标注上具体数值的方法
Jul 08 Python
Python 单例设计模式用法实例分析
Sep 23 Python
Python生成器generator原理及用法解析
Jul 20 Python
浅谈anaconda python 版本对应关系
Oct 07 Python
python中类与对象之间的关系详解
Dec 16 Python
Python基础之tkinter图形化界面学习
Apr 29 Python
从多个tfrecord文件中无限读取文件的例子
Feb 17 #Python
Python3连接Mysql8.0遇到的问题及处理步骤
Feb 17 #Python
python3连接MySQL8.0的两种方式
Feb 17 #Python
Win10下安装并使用tensorflow-gpu1.8.0+python3.6全过程分析(显卡MX250+CUDA9.0+cudnn)
Feb 17 #Python
Windows下实现将Pascal VOC转化为TFRecords
Feb 17 #Python
tensorflow生成多个tfrecord文件实例
Feb 17 #Python
tensorflow将图片保存为tfrecord和tfrecord的读取方式
Feb 17 #Python
You might like
php 操作excel文件的方法小结
2009/12/31 PHP
PHP 快速排序算法详解
2014/11/10 PHP
Yii获取当前url和域名的方法
2015/06/08 PHP
ThinkPHP 在阿里云上的nginx.config配置实例详解
2017/10/11 PHP
PHP异常类及异常处理操作实例详解
2018/12/19 PHP
Js sort排序使用方法
2011/10/17 Javascript
JavaScript面向对象设计二 构造函数模式
2011/12/20 Javascript
js切换div css注意的细节
2012/12/10 Javascript
使用js如何实现全选与全不选
2013/12/30 Javascript
js判断undefined类型示例代码
2014/02/10 Javascript
Javascript 赋值机制详解
2014/11/23 Javascript
JS读写CSS样式的方法汇总
2016/08/16 Javascript
基于百度地图实现产品销售的单位位置查看功能设计与实现
2016/10/21 Javascript
svg动画之动态描边效果
2017/02/22 Javascript
nodeJS实现简单网页爬虫功能的实例(分享)
2017/06/08 NodeJs
详解webpack + vue + node 打造单页面(入门篇)
2017/09/23 Javascript
JS排序算法之希尔排序与快速排序实现方法
2017/12/12 Javascript
vue.js 实现点击展开收起动画效果
2018/07/07 Javascript
vue项目中axios请求网络接口封装的示例代码
2018/12/18 Javascript
基于脚手架创建Vue项目实现步骤详解
2020/08/03 Javascript
使用70行Python代码实现一个递归下降解析器的教程
2015/04/17 Python
Python的自动化部署模块Fabric的安装及使用指南
2016/01/19 Python
使用Python的Scrapy框架十分钟爬取美女图
2016/12/26 Python
Python+matplotlib实现华丽的文本框演示代码
2018/01/22 Python
python使用PyQt5的简单方法
2019/02/27 Python
django解决订单并发问题【推荐】
2019/07/31 Python
Mistine官方海外旗舰店:泰国国民彩妆品牌
2016/12/28 全球购物
美国购买当代和现代家具网站:MODTEMPO
2018/07/20 全球购物
精选干货:Java精选笔试题附答案
2014/01/18 面试题
材料专业大学毕业生自荐书
2014/07/02 职场文书
骨干教师事迹材料
2014/12/17 职场文书
《司马光》教学反思
2016/02/22 职场文书
商业计划书格式、范文
2019/03/21 职场文书
2019客服个人年终工作总结范文
2019/07/08 职场文书
关于Javascript闭包与应用的详解
2021/04/22 Javascript
Python调用腾讯API实现人脸身份证比对功能
2022/04/04 Python