Python 如何检查Tensorflow.tfrecord文件?

Python 如何检查Tensorflow.tfrecord文件?,python,tensorflow,tfrecord,Python,Tensorflow,Tfrecord,我有一个.tfrecord,但我不知道它是如何构造的。如何检查架构以了解.tfrecord文件包含的内容 所有Stackoverflow答案或文档似乎都假定我知道文件的结构 reader = tf.TFRecordReader() file = tf.train.string_input_producer("record.tfrecord") _, serialized_record = reader.read(file) ...HOW TO INSPECT serialized_record

我有一个
.tfrecord
,但我不知道它是如何构造的。如何检查架构以了解
.tfrecord
文件包含的内容

所有Stackoverflow答案或文档似乎都假定我知道文件的结构

reader = tf.TFRecordReader()
file = tf.train.string_input_producer("record.tfrecord")
_, serialized_record = reader.read(file)

...HOW TO INSPECT serialized_record...

将TensorFlow
tf.TFRecordReader
tf.parse_single_示例
解码器一起使用,如中所述

PS,tfrecord包含中定义的“示例”记录

一旦将记录提取到字符串中,解析过程如下

a=tf.train.Example()
result = a.ParseFromString(binary_string_with_example_record)
但是,我不确定从文件中提取单个记录的原始支持在哪里,您可以在
TFRecordReader
中找到它

import tensorflow as tf

for example in tf.python_io.tf_record_iterator("data/foobar.tfrecord"):
    print(tf.train.Example.FromString(example))
您还可以添加:

from google.protobuf.json_format import MessageToJson
...
jsonMessage = MessageToJson(tf.train.Example.FromString(example))

如果您的
.tftcrecord
包含SequenceExample,则接受的答案不会显示所有内容。您可以使用:

import tensorflow as tf

for example in tf.python_io.tf_record_iterator("data/foobar.tfrecord"):
    result = tf.train.SequenceExample.FromString(example)
    break
print(result)
这将向您展示第一个示例的内容

然后,您还可以使用各个特征的键来检查各个特征:

result.context.feature["foo_key"]
对于功能列表:

result.feature_lists.feature_list["bar_key"]

如果可以选择安装另一个Python包,则非常方便

例如:

[1]中的
:将tensorflow作为tf导入
…:来自tfrecord\u lite导入解码\u示例
...:
…:it=tf.python\u io.tf\u record\u迭代器('nsynth-test.tfrecord'))
…:解码示例(下一步(it))
...:
出[1]:
{'audio':数组([3.81387E-06,-3.8721851e-06,3.9331076e-06。。。,
-3.6526076e-06,3.7041993e-06,-3.7578957e-06],数据类型=浮动32),
“instrument”:数组([417],dtype=int64),
“仪器族”:数组([0],dtype=int64),
“乐器家族”:[b'bass'],
“仪器源”:数组([2],dtype=int64),
‘仪器来源’:[b‘合成’],
“仪表街”:[b'bass_synthetic_033'],
“注意”:数组([149013],dtype=int64),
“note_str”:[b'bass_synthetic_033-100-100'],
“pitch”:数组([100],dtype=int64),
“质量”:数组([0,0,0,0,0,0,0,0,0,0],dtype=int64),
“采样率”:数组([16000],dtype=int64),
“速度”:数组([100],dtype=int64)}

您可以通过
pip install tfrecord\u lite
安装它

以上解决方案对我不起作用,因此对于TF2.0,请使用以下内容:

import tensorflow as tf 
raw_dataset = tf.data.TFRecordDataset("path-to-file")

for raw_record in raw_dataset.take(1):
    example = tf.train.Example()
    example.ParseFromString(raw_record.numpy())
    print(example)

我建议使用以下脚本:

它可以使用TF和openCV方便地目视检查TF记录,尽管需要一些修改(对于标签等)。
请参阅存储库中的进一步说明,以改进已接受的解决方案:

将tensorflow导入为tf
导入json
dataset=tf.data.TFRecordDataset(“mydata.tfrecord”)
对于数据集中的d:
ex=tf.train.Example()
ex.ParseFromString(d.numpy())
m=json.load(MessageToJson(ex))
打印(m['features']['feature'].keys())

在我的例子中,我在TF2上运行,单个示例太大,无法显示在我的屏幕上,因此我需要使用字典检查键(接受的解决方案返回完整字符串)。

谢谢!这正是我想要的。这个解决方案似乎没有显示文件的所有内容。是这样吗?我没有太多这样的问题。这节省了我很多时间!!如果我没有弄错的话,这将遍历整个TFRecord文件,为您提供一个示例的内容。有没有更有效的方法只读取一个示例?TFRecord文件必须从每个文档开始按顺序读取。我相信有一种方法可以随机读取它们,但可能没有支持的标准。断开的Link11111答案应该改为这个答案是来自google protobuf的MessageToJson吗?