如何检查 Tensorflow .tfrecord 文件?
How to inspect a Tensorflow .tfrecord file?
我有一个 .tfrecord
但我不知道它的结构。我如何检查架构以了解 .tfrecord
文件包含的内容?
所有 Whosebug 答案或文档似乎都假设我知道文件的结构。
reader = tf.TFRecordReader()
file = tf.train.string_input_producer("record.tfrecord")
_, serialized_record = reader.read(file)
...HOW TO INSPECT serialized_record...
按照 https://www.tensorflow.org/programmers_guide/reading_data
中指定的 tf.parse_single_example
解码器使用 TensorFlow tf.TFRecordReader
PS,tfrecord 包含在 https://github.com/tensorflow/tensorflow/blob/master/tensorflow/core/example/example.proto
中定义的 'Example' 条记录
一旦你将记录提取成一个字符串,解析它就是这样的
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))
如果您的 .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"]
对于功能列表:
result.feature_lists.feature_list["bar_key"]
如果可以选择安装另一个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
安装它。
以上解决方案对我不起作用,所以对于 TF 2.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)
https://www.tensorflow.org/tutorials/load_data/tfrecord#reading_a_tfrecord_file_2
我推荐以下脚本:tfrecord-view。
它可以使用 TF 和 openCV 方便地目视检查 TF 记录,尽管需要进行一些修改(对于标签等)。
请参阅存储库中的进一步说明
改进公认的解决方案:
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 上,单个示例太大而无法显示在我的屏幕上,所以我需要使用字典来检查键(公认的解决方案 return一个完整的字符串)。
我有一个 .tfrecord
但我不知道它的结构。我如何检查架构以了解 .tfrecord
文件包含的内容?
所有 Whosebug 答案或文档似乎都假设我知道文件的结构。
reader = tf.TFRecordReader()
file = tf.train.string_input_producer("record.tfrecord")
_, serialized_record = reader.read(file)
...HOW TO INSPECT serialized_record...
按照 https://www.tensorflow.org/programmers_guide/reading_data
中指定的tf.parse_single_example
解码器使用 TensorFlow tf.TFRecordReader
PS,tfrecord 包含在 https://github.com/tensorflow/tensorflow/blob/master/tensorflow/core/example/example.proto
中定义的 'Example' 条记录一旦你将记录提取成一个字符串,解析它就是这样的
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))
如果您的 .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"]
对于功能列表:
result.feature_lists.feature_list["bar_key"]
如果可以选择安装另一个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
安装它。
以上解决方案对我不起作用,所以对于 TF 2.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)
https://www.tensorflow.org/tutorials/load_data/tfrecord#reading_a_tfrecord_file_2
我推荐以下脚本:tfrecord-view。
它可以使用 TF 和 openCV 方便地目视检查 TF 记录,尽管需要进行一些修改(对于标签等)。 请参阅存储库中的进一步说明
改进公认的解决方案:
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 上,单个示例太大而无法显示在我的屏幕上,所以我需要使用字典来检查键(公认的解决方案 return一个完整的字符串)。