读取用于编码的特征未知的 TFRecord 文件
Reading a TFRecord file where features that were used to encode is not known
我是 TensorFlow 的新手,这可能是一个非常初学者的问题。我见过一些示例,其中自定义数据集使用想要使用的功能知识(例如-'image'、'label')转换为 TFRecord 文件。在解析这个 TFRecord 文件时,必须事先知道这些特征(即 'image'、'label')才能使用这个数据集。
我的问题是 - 我们如何解析事先不知道特性的 TFRecord 文件?假设有人给了我一个 TFRecord 文件,我想用它解码所有相关的功能。
我指的一些例子是:Link 1,
以下内容可能会有所帮助。这是一个遍历记录文件并保存有关功能的可用信息的功能。您可以将其修改为只查看第一条记录和 return 该信息,尽管根据情况,查看所有记录可能很有用,以防可选功能仅出现在某些或具有变量的功能中尺寸。
import tensorflow as tf
def list_record_features(tfrecords_path):
# Dict of extracted feature information
features = {}
# Iterate records
for rec in tf.data.TFRecordDataset([str(tfrecords_path)]):
# Get record bytes
example_bytes = rec.numpy()
# Parse example protobuf message
example = tf.train.Example()
example.ParseFromString(example_bytes)
# Iterate example features
for key, value in example.features.feature.items():
# Kind of data in the feature
kind = value.WhichOneof('kind')
# Size of data in the feature
size = len(getattr(value, kind).value)
# Check if feature was seen before
if key in features:
# Check if values match, use None otherwise
kind2, size2 = features[key]
if kind != kind2:
kind = None
if size != size2:
size = None
# Save feature data
features[key] = (kind, size)
return features
你可以这样使用它
import tensorflow as tf
tfrecords_path = 'data.tfrecord'
# Make some test records
with tf.io.TFRecordWriter(tfrecords_path) as writer:
for i in range(10):
example = tf.train.Example(
features=tf.train.Features(
feature={
# Fixed length
'id': tf.train.Feature(
int64_list=tf.train.Int64List(value=[i])),
# Variable length
'data': tf.train.Feature(
float_list=tf.train.FloatList(value=range(i))),
}))
writer.write(example.SerializeToString())
# Print extracted feature information
features = list_record_features(tfrecords_path)
print(*features.items(), sep='\n')
# ('id', ('int64_list', 1))
# ('data', ('float_list', None))
我是 TensorFlow 的新手,这可能是一个非常初学者的问题。我见过一些示例,其中自定义数据集使用想要使用的功能知识(例如-'image'、'label')转换为 TFRecord 文件。在解析这个 TFRecord 文件时,必须事先知道这些特征(即 'image'、'label')才能使用这个数据集。
我的问题是 - 我们如何解析事先不知道特性的 TFRecord 文件?假设有人给了我一个 TFRecord 文件,我想用它解码所有相关的功能。
我指的一些例子是:Link 1,
以下内容可能会有所帮助。这是一个遍历记录文件并保存有关功能的可用信息的功能。您可以将其修改为只查看第一条记录和 return 该信息,尽管根据情况,查看所有记录可能很有用,以防可选功能仅出现在某些或具有变量的功能中尺寸。
import tensorflow as tf
def list_record_features(tfrecords_path):
# Dict of extracted feature information
features = {}
# Iterate records
for rec in tf.data.TFRecordDataset([str(tfrecords_path)]):
# Get record bytes
example_bytes = rec.numpy()
# Parse example protobuf message
example = tf.train.Example()
example.ParseFromString(example_bytes)
# Iterate example features
for key, value in example.features.feature.items():
# Kind of data in the feature
kind = value.WhichOneof('kind')
# Size of data in the feature
size = len(getattr(value, kind).value)
# Check if feature was seen before
if key in features:
# Check if values match, use None otherwise
kind2, size2 = features[key]
if kind != kind2:
kind = None
if size != size2:
size = None
# Save feature data
features[key] = (kind, size)
return features
你可以这样使用它
import tensorflow as tf
tfrecords_path = 'data.tfrecord'
# Make some test records
with tf.io.TFRecordWriter(tfrecords_path) as writer:
for i in range(10):
example = tf.train.Example(
features=tf.train.Features(
feature={
# Fixed length
'id': tf.train.Feature(
int64_list=tf.train.Int64List(value=[i])),
# Variable length
'data': tf.train.Feature(
float_list=tf.train.FloatList(value=range(i))),
}))
writer.write(example.SerializeToString())
# Print extracted feature information
features = list_record_features(tfrecords_path)
print(*features.items(), sep='\n')
# ('id', ('int64_list', 1))
# ('data', ('float_list', None))