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.featuresprint('{0} 信息如下:'.format(filepath))for key in features.feature:feature = features.feature[key]ftype = Nonefvalue = Noneif len(feature.bytes_list.value) > 0:ftype = 'bytes_list'fvalue = feature.bytes_list.valueif len(feature.float_list.value) > 0:ftype = 'float_list'fvalue = feature.float_list.valueif len(feature.int64_list.value) > 0:ftype = 'int64_list'fvalue = feature.int64_list.valueresult = '{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 tffilename = "/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相关推荐

  1. python文件怎么看代码表_TFRecord文件查看包含的所有Features代码

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

  2. tfrecord文件生成与读取

    参考博客--tensorflow-TFRecord 文件详解 1. 生成tfrecord文件 代码 #1.创建tfrecord对象 tf_record=tf.python_io.TFRecordWri ...

  3. tfrecord原理详解 手把手教生成tfrecord文件与解析tfrecord文件

    1.什么是tfrecord TFRecord 是Google官方推荐的一种数据格式,是Google专门为TensorFlow设计的一种数据格式. TFRecord本质上是二进制文件,目的是更好的利用内 ...

  4. python如何读取tfrecord文件_TFRecord读取数据

    TFRecord 这篇文章基于一个生成tfrecord和解析tfrecord的代码,对TFRecord进行了详细的解析. 一. 什么是TFRecord? Tensorflow的文档中说: " ...

  5. 【玩转.Net MF – 03】远程文件查看器

    虽说目前.Net Micro Framework已经支持文件系统(FAT16/FAT32),但在远程还无法直接访问,从某种意义上讲,无法和PC交互的存储介质显得有些鸡肋.我做SideShow相关开发的 ...

  6. 如何在另一个JavaScript文件中包含一个JavaScript文件?

    JavaScript中是否有类似于CSS中@import的内容,可让您在另一个JavaScript文件中包含一个JavaScript文件? #1楼 而不是在运行时添加,而是使用脚本在上传之前进行串联. ...

  7. linux elf 文件查看工具 readelf

    Android在NDK开发工具中提供了readelf,用来帮助开发者查看编译后目标文件的组成结构和具体内容. 常用的有以下几个功能选项: 1)-h或者--file-header 显示在ELF文件头里包 ...

  8. [Linux]搜索文件是否包含指定内容并返回文件名

    在Linux系统中,find和grep都是很强大的命令,可以做很多很多事情,今天刚好有人问"如何查找哪些文件包含了特定字符串,并显示这些文件的名称". 第一种方法:使用grep,假 ...

  9. eclipse和Myeclipse中的properties文件查看和编辑插件

    Eclipse *.properties属性文件,如果文件中包含中文,会出现乱码.为了解决这个问题,可以为Eclipse安装Properties Editor插件解决这个问题. 步骤 1.安装Prop ...

最新文章

  1. 另类无法在ESXi上添加存储器故障
  2. 第3讲--3.1旋转矩阵
  3. error: passing ‘const xxx’ as ‘this’ argument discards qualifiers c++primer 5th文本查询程序一个错误请各位指教(已解决)
  4. js 日期对象 31 号 setMonth 的锅
  5. java 自定义 钩子_Java添加关闭钩子里面的方法
  6. 华为政企云副总裁 年薪_看好“新基建”华为云战略投入政企市场
  7. linux下service+命令和直接去执行命令的区别,怎么自己建立一个service启动
  8. 多用户用linux会很卡顿吗,新手学Linux系统,解决Linux系统卡顿的方法
  9. 使用runtime跳转界面
  10. 【预测模型-ELAMN预测】基于哈里斯鹰算法优化ELMAN神经网络实现数据回归预测matlab代码
  11. 怎么样选择合适的CFA备考资料
  12. html 项目考勤展示页面,打卡页面.html
  13. [LAMP兄弟连李明老师讲Linux].课件Shell编程
  14. NFT+体育,卡塔尔世界杯有哪些NFT看点!
  15. 十大IT危机处理高手
  16. 你们让我推荐的营销管理书籍找到了!
  17. TX-LCN和Seata
  18. 织梦CMS模板安装教程详细图文
  19. 美国队长的工资 python代码-Python | 用Python画个美队盾牌送给你
  20. 美团商品平台化之路—关于架构原则的思考

热门文章

  1. 如何用U盘装系统(图解)
  2. iOS 利用宏判断系统版本
  3. python中数组转矩阵_python实现矩阵和array数组之间的转换
  4. ocr的场景应用--发票识别
  5. (三)Fabric1.4 编写链码【上】
  6. [转] 罗德里格斯公式推导,以及如何使用cv2.Rodrigues进行旋转矩阵和旋转向量之间的相互转化
  7. docker下使用guacamole
  8. 三角肌前束(06):阿诺德推举
  9. 华纳云分享DNS服务器无响应的解决方法
  10. 360笔试编程题-圈地运动