如何检查TensorFlow 1.13中TFRecord文件的结构?

2024-07-01 06:47:28 发布

您现在位置:Python中文网/ 问答频道 /正文

我对TFRecord文件格式以及如何使用它感到困惑。我有一个TFRecord,但不知道它到底包含什么,它的结构是什么。如何打印和检查TFRecord和/或其TFExamples?我问的基本上与this question相同,但是这个问题的答案已经过时了。打印我的TFRecordoutput_shapesoutput_types或{}没有告诉我什么(为什么?)。tf.io.tf_record_iterator()函数已被弃用,但是TFRecord数据集现在看起来自己是可编辑的(但是为什么还需要datasets#creating_an_iterator" rel="nofollow noreferrer">the other迭代器呢?)。但是,简单地打印每个迭代都会返回胡言乱语,tf.train.Example.FromString(example)会抛出一个TypeError: a bytes-like object is required, not 'tensorflow.python.framework.ops.EagerTensor'。这一切让人相当困惑。简单地使用from_tensor_slices()初始化一个tf.data.Dataset似乎更容易检查,而且实际上提供了关于其形状和类型的信息。在


Tags: 数据函数答案iooutputtftfrecordthis
1条回答
网友
1楼 · 发布于 2024-07-01 06:47:28

可以使用tf.python_io.tf_record_iterator检查tfrecords文件。它创造了一个世代。要访问单个示例,您需要对其进行迭代:

for str_rec in tf.python_io.tf_record_iterator('file.tfrecords'):
    example = tf.train.Example()
    example.ParseFromString(str_rec)
    print(dict(example.features.feature).keys())

这将输出特性名称和类型(在本例中为bytes\u list)

^{pr2}$

要输出数据类型,还需要

print(dict(example.features.feature).values())

但这也将打印原始字符串,并且您可以达到屏幕长度限制。在

当您知道它是如何编码的,您可以通过

string = example.features.feature['image_raw'].bytes_list.value[0]
output = np.fromstring(string, dtype)

你可以在这里阅读更多关于它的https://www.tensorflow.org/tutorials/load_data/tf_records

编辑: 如果启用了eager模式,则可以直接迭代dataset对象,使用numpy进行解码

for str_rec in tf.data.TFRecordDataset('file.tfrecords'):
    output = np.fromstring(str_rec.numpy(), dtype))

或者本地TF。tf.io.decode_raw(str_rec, tf.uint8))

然而,这将给你一个平坦的数组,它不会携带任何关于图像尺寸大小的信息

相关问题 更多 >

    热门问题