Emi*_*oss 2 python training-data tensorflow tfrecord
我对 TFRecord 文件格式以及如何使用它感到困惑。我有一个 TFRecord,但不知道它究竟包含什么以及它的结构是什么。如何打印和检查 TFRecord 和/或其 TFExamples?我基本上问了与这个问题相同的问题,但是那个答案已经过时了。打印output_shapes,output_types或output_classesmyTFRecord告诉我什么都没有(为什么?)。该tf.io.tf_record_iterator()函数已被弃用,但 TFRecord 数据集现在看起来自己是可迭代的(但为什么仍然需要其他迭代器?)。然而,简单地打印每次迭代会返回乱码,并tf.train.Example.FromString(example)抛出一个TypeError: a bytes-like object is required, not 'tensorflow.python.framework.ops.EagerTensor'. 这一切都比较混乱。简单地初始化一个tf.data.Datasetusingfrom_tensor_slices() 看起来更容易检查,实际上提供了有关其形状和类型的信息。
您可以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())
Run Code Online (Sandbox Code Playgroud)
这将输出特征名称和类型(在这种情况下是bytes_list)
dict_keys(['label', 'width', 'image_raw', 'height'])
Run Code Online (Sandbox Code Playgroud)
还要输出数据类型,您需要
print(dict(example.features.feature).values())
Run Code Online (Sandbox Code Playgroud)
但这也会打印原始字符串,并且您可以达到屏幕长度限制。
当您知道它的编码方式时,您可以通过以下方式访问值
string = example.features.feature['image_raw'].bytes_list.value[0]
output = np.fromstring(string, dtype)
Run Code Online (Sandbox Code Playgroud)
你可以在这里阅读更多关于它的信息https://www.tensorflow.org/tutorials/load_data/tf_records
编辑:如果开启了急切模式,您可以直接迭代数据集对象,使用 numpy 进行解码
for str_rec in tf.data.TFRecordDataset('file.tfrecords'):
output = np.fromstring(str_rec.numpy(), dtype))
Run Code Online (Sandbox Code Playgroud)
或本机TF。 tf.io.decode_raw(str_rec, tf.uint8))
但是,这将为您提供一个展平数组,例如,它不会携带有关图像尺寸大小的任何信息
| 归档时间: |
|
| 查看次数: |
2521 次 |
| 最近记录: |