如何检查Tensorflow .tfrecord文件?

时间:2017-02-22 14:41:49

标签: 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...

7 个答案:

答案 0 :(得分:69)

发现它!

import tensorflow as tf

for example in tf.python_io.tf_record_iterator("data/foobar.tfrecord"):
    result = tf.train.Example.FromString(example)

您还可以添加:

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

答案 1 :(得分:16)

上述解决方案不适用于我,因此对于TF 2.0,请使用此

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)

https://www.tensorflow.org/tutorials/load_data/tfrecord#reading_a_tfrecord_file_2

答案 2 :(得分:3)

将TensorFlow tf.TFRecordReaderhttps://www.tensorflow.org/programmers_guide/reading_data

中指定的tf.parse_single_example解码器配合使用

PS,tfrecord包含'示例' https://github.com/tensorflow/tensorflow/blob/master/tensorflow/core/example/example.proto

中定义的记录

将记录提取到字符串后,解析它就像这样

a=tf.train.Example()
result = a.ParseFromString(binary_string_with_example_record)

但是,我不确定从文件中提取单个记录的原始支持位置,您可以在TFRecordReader

中对其进行追踪

答案 3 :(得分:2)

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

示例:

In [1]: import tensorflow as tf
   ...: from tfrecord_lite import decode_example
   ...:
   ...: it = tf.python_io.tf_record_iterator('nsynth-test.tfrecord')
   ...: decode_example(next(it))
   ...:
Out[1]:
{'audio': array([ 3.8138387e-06, -3.8721851e-06,  3.9331076e-06, ...,
        -3.6526076e-06,  3.7041993e-06, -3.7578957e-06], dtype=float32),
 'instrument': array([417], dtype=int64),
 'instrument_family': array([0], dtype=int64),
 'instrument_family_str': [b'bass'],
 'instrument_source': array([2], dtype=int64),
 'instrument_source_str': [b'synthetic'],
 'instrument_str': [b'bass_synthetic_033'],
 'note': array([149013], dtype=int64),
 'note_str': [b'bass_synthetic_033-100-100'],
 'pitch': array([100], dtype=int64),
 'qualities': array([0, 0, 0, 0, 0, 0, 0, 0, 0, 0], dtype=int64),
 'sample_rate': array([16000], dtype=int64),
 'velocity': array([100], dtype=int64)}

您可以通过pip install tfrecord_lite安装它。

答案 4 :(得分:1)

如果您的.tftrecord包含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"]

对于FeatureList:

result.feature_lists.feature_list["bar_key"]

答案 5 :(得分:1)

改进公认的解决方案:

import tensorflow as tf
import json

dataset = tf.data.TFRecordDataset("mydata.tfrecord")
for d in dataset:
    ex = tf.train.Example()
    ex.ParseFromString(d.numpy())
    m = json.loads(MessageToJson(ex))
    print(m['features']['feature'].keys())

就我而言,我在TF2上运行,并且一个示例太大而无法在屏幕上显示,因此我需要使用词典来检查键(可接受的解决方案返回完整的字符串)。

答案 6 :(得分:0)

我建议使用以下脚本:tfrecord-view

它可以使用TF和openCV方便地可视化检查TF记录,尽管需要进行一些修改(对于标签等)。 查看存储库中的更多说明