TFRecord文件查看包含的所有Features代码


Posted in Python onFebruary 17, 2020

TFRecord作为tensorflow中广泛使用的数据格式,它跨平台,省空间,效率高。因为 Tensorflow开发者众多,统一训练时数据的文件格式是一件很有意义的事情,也有助于降低学习成本和迁移成本。

但是TFRecord数据是二进制格式,没法直接查看。因此,如何能够方便的查看TFRecord格式和数据,就显得尤为重要了。

为什么需要查看TFReocrd数据?首先我们先看下常规的写入和读取TFRecord数据的关键过程。

# 1. 写入过程
# 一张图片,我写入了其内容,label,长和宽几个信息
tf_example = tf.train.Example(
    features=tf.train.Features(feature={
      'encoded': bytes_feature(encoded_jpg),
      'label': int64_feature(label),
      'height': int64_feature(height),
      'width': int64_feature(width)}))
# 2. 读取过程
# 定义解析的TFRecord数据格式
def _parse_image(example_proto):
   features = {'encoded':tf.FixedLenFeature((),tf.string),
  'label': tf.FixedLenFeature((), tf.int64),
  'height': tf.FixedLenFeature((), tf.int64),
  'width': tf.FixedLenFeature((), tf.int64)
}
return tf.parse_single_example(example_proto, features)
 
# TFRecord数据按照Feature解析出对应的真实数据
ds = ds.map(lambda x : _parse_image(x), num_parallel_calls=4)

上面是一个标准的TFRecord数据的写入和读取部分过程,大家应该发现了,读取TFRecord数据的时候,得知道TFRecord数据保存的属性名和类型,任何一项不匹配,都会导致无法获取数据。

如果数据的写入和读取都是自己一个人完成,那就没问题。但是如果写入和读取是跨团队合作时候,如果每次读取数据都得让对方给完整的属性名和属性类型,那效率就太低了。毕竟TFRecord数据已经包含了一切,自己动手丰衣足食。

那么怎么查看TFRecord数据呢?使用python tf.train.Example.FromString(serialized_example)方法,方法的入参是TFRecord包含的数据字符串。

然后,我直接将上诉查看的过程写成了一个py脚本,需要自取。

#!/usr/bin/python
# -*- coding: utf-8 -*-
 
import sys
import tensorflow as tf
 
# 用法:python trackTFRecord.py True file1 file2 
# trackTFRecord.py 就是当前这个py文件
# True 表示是否输出具体的数据
# file1 file2 表示的是需要查看的TFRecord文件的绝对路径
# 输出说明:tf.float32对应TFRecord的FloatList,tf.int64对应Int64List,tf.string对应BytesList
def main():
  print('TFRecord文件个数为{0}个'.format(len(sys.argv)-2))
  for i in range(2, len(sys.argv)):
    filepath = sys.argv[i]
    with tf.Session() as sess:
      filenames = [filepath]
      # 加载TFRecord数据
      ds = tf.data.TFRecordDataset(filenames)
      ds = ds.batch(10)
      ds = ds.prefetch(buffer_size=tf.contrib.data.AUTOTUNE)
      iterator = ds.make_one_shot_iterator()
      # 为了加快速度,仅仅简单拿一组数据看下结构
      batch_data = iterator.get_next()
      res = sess.run(batch_data)
      serialized_example = res[0]
      example_proto = tf.train.Example.FromString(serialized_example)
      features = example_proto.features
      print('{0} 信息如下:'.format(filepath))
      for key in features.feature:
        feature = features.feature[key]
        ftype = None
        fvalue = None
        if len(feature.bytes_list.value) > 0:
          ftype = 'bytes_list'
          fvalue = feature.bytes_list.value
          
        if len(feature.float_list.value) > 0:
          ftype = 'float_list'
          fvalue = feature.float_list.value
          
        if len(feature.int64_list.value) > 0:
          ftype = 'int64_list'
          fvalue = feature.int64_list.value
        
        result = '{0} : {1}'.format(key, ftype)
        if 'True' == sys.argv[1]:
          result = '{0} : {1}'.format(result, fvalue)
        print(result) 
 
if __name__ == "__main__":
  main()

下面给大家实例演示,首先先随便找个图片,写入到TFRecord数据

import tensorflow as tf
 
filename = "/Users/zhanhaitao/Desktop/1.png"
# 使用tf.read_file读进图片数据
image = tf.read_file(filename)
# 主要是为了获取图片的宽高
image_jpeg = tf.image.decode_jpeg(image, channels=3, name="decode_jpeg_picture")
# reshape图片到原始大小2500x2000x3
image_jpeg = tf.reshape(image_jpeg, shape=(2500,2000,3))
# 获取图片shape数据
img_shape = image_jpeg.shape
width = img_shape[0]
height = img_shape[1]
# 将原图片tensor生成bytes对象, image将保存到tfrecord
sess = tf.Session()
image = sess.run(image)
sess.close()
# 定义TFRecords文件的保存路径及其文件名
path_none = "/Users/zhanhaitao/Desktop/a.tfrecord"
# 定义不同压缩选项的TFRecordWriter
writer_none = tf.python_io.TFRecordWriter(path_none, options=None)
# 将外层features生成特定格式的example
example_none = tf.train.Example(features=tf.train.Features(feature={
"float_val":tf.train.Feature(float_list=tf.train.FloatList(value=[9.99])),
"width":tf.train.Feature(int64_list=tf.train.Int64List(value=[width])),
"height":tf.train.Feature(int64_list=tf.train.Int64List(value=[height])),
"image_raw":tf.train.Feature(bytes_list=tf.train.BytesList(value=[image]))
}))
# example系列化字符串
example_str_none = example_none.SerializeToString()
# 将系列化字符串写入协议缓冲区
writer_none.write(example_str_none)
 
# 关闭TFRecords文件操作接口
writer_none.close()
 
print("finish to write data to tfrecord file!")

然后,使用上面的脚本看下这个TFRecord数据定义了哪些属性,以及对应的格式,先进入到脚本的目录下,因为图像数据内容太大,影响阅读,就只看属性名和type了:

python trackTFRecord.py False /Users/zhanhaitao/Desktop/a.tfrecord
# 结果,其中bytes_list对应tf.string,int64_list对应tf.int64 float_list对应tf.float32
# image_raw : bytes_list
# width : int64_list
# float_val : float_list
# height : int64_list

以上这篇TFRecord文件查看包含的所有Features代码就是小编分享给大家的全部内容了,希望能给大家一个参考,也希望大家多多支持三水点靠木。

Python 相关文章推荐
python中os操作文件及文件路径实例汇总
Jan 15 Python
Python脚本在Appium库上对移动应用实现自动化测试
Apr 17 Python
python读取TXT到数组及列表去重后按原来顺序排序的方法
Jun 26 Python
python使用opencv进行人脸识别
Apr 07 Python
Python将多个excel文件合并为一个文件
Jan 03 Python
python 发送和接收ActiveMQ消息的实例
Jan 30 Python
python3.6生成器yield用法实例分析
Aug 23 Python
python pygame实现滚动横版射击游戏城市之战
Nov 25 Python
Python实现链表反转的方法分析【迭代法与递归法】
Feb 22 Python
关于win10在tensorflow的安装及在pycharm中运行步骤详解
Mar 16 Python
python使用Word2Vec进行情感分析解析
Jul 31 Python
Python Socket多线程并发原理及实现
Dec 11 Python
tensorflow之tf.record实现存浮点数数组
Feb 17 #Python
Python读取表格类型文件代码实例
Feb 17 #Python
基于Python获取docx/doc文件内容代码解析
Feb 17 #Python
Python多线程获取返回值代码实例
Feb 17 #Python
Python实现ATM系统
Feb 17 #Python
python设置环境变量的作用整理
Feb 17 #Python
python数据爬下来保存的位置
Feb 17 #Python
You might like
键盘控制事件应用教程大全
2006/11/24 Javascript
动态加载外部javascript文件的函数代码分享
2011/07/28 Javascript
jQuery插件开发的两种方法及$.fn.extend的详解
2014/01/16 Javascript
使用纯JS代码判断字符串中有多少汉字的实现方法(超简单实用)
2016/11/12 Javascript
vue实现登录后页面跳转到之前页面
2018/01/07 Javascript
vue 使用html2canvas将DOM转化为图片的方法
2018/09/11 Javascript
微信小程序实现的canvas合成图片功能示例
2019/05/03 Javascript
Layui弹框中数据表格中可双击选择一条数据的实现
2020/05/06 Javascript
解决vue单页面多个组件嵌套监听浏览器窗口变化问题
2020/07/30 Javascript
[00:16]热血竞技场
2019/03/06 DOTA
[01:09:19]DOTA2-DPC中国联赛 正赛 VG vs Aster BO3 第二场 2月28日
2021/03/11 DOTA
Django在Win7下的安装及创建项目hello word简明教程
2014/07/14 Python
python多进程实现文件下载传输功能
2018/07/28 Python
Python 虚拟空间的使用代码详解
2019/06/10 Python
python脚本开机自启的实现方法
2019/06/28 Python
python Django框架实现web端分页呈现数据
2019/10/31 Python
Python中低维数组填充高维数组的实现
2019/12/02 Python
Django中的AutoField字段使用
2020/05/18 Python
python 爬虫之selenium可视化爬虫的实现
2020/12/04 Python
HTML5画渐变背景图片并自动下载实现步骤
2013/11/18 HTML / CSS
如何反序的迭代一个序列?how do I iterate over a sequence in reverse order
2012/02/04 面试题
《雾凇》教学反思
2014/02/17 职场文书
《他得的红圈圈最多》教学反思
2014/04/24 职场文书
青年安全生产示范岗事迹材料
2014/05/04 职场文书
航空学院求职信
2014/06/11 职场文书
领导干部遵守党的政治纪律情况思想汇报
2014/09/14 职场文书
学校班子个人对照检查材料思想汇报
2014/09/27 职场文书
关于随地扔垃圾的检讨书
2014/09/30 职场文书
领导干部“四风”查摆问题个人整改措施
2014/10/28 职场文书
3.15消费者权益日活动总结
2015/02/09 职场文书
入党积极分子党支部意见
2015/06/02 职场文书
工作简报怎么写
2015/07/21 职场文书
Python如何把不同类型数据的json序列化
2021/04/30 Python
springboot如何初始化执行sql语句
2021/06/22 Java/Android
高性能跳频抗干扰宽带自组网电台
2022/02/18 无线电
vue-cli3.x配置全局的scss的时候报错问题及解决
2022/04/30 Vue.js