笔记:
Example
和SequenceExample
的最佳方法,以试图了解哪种数据更类似于提供的伪数据。我提供了Example
和SequenceExample
构造的明确表述,并在回答中提供了一种编程的方式来实现。 我正在尝试学习如何将我的数据转换为TF记录,因为声称的好处对于我的数据是值得的。但是,文档还有很多不足之处,而试图深入学习的教程/博客(我已经看到)实际上只是接触表面或重新整理了现有的稀疏文档。
对于我的previous question中以及此处所考虑的演示数据,我编写了一个不错的类,它采用:
并可以采用以下6种形式之一对数据进行编码:
int64
)分开,并且元数据附加在numpy.ndarray.tostring()
)分开,元数据附加在这很好。
在Colab中,我展示了如何将虚拟数据全部写入同一文件以及单独的文件中。
我的问题是如何恢复这些数据?
我在链接文件中做了4次尝试。
为什么TFReader与TFWriter处于不同的子软件包下?
最佳答案
通过更新功能以包括形状信息并记住SequenceExample
是未命名 FeatureLists
来解决。
context_features = {
'Name' : tf.FixedLenFeature([], dtype=tf.string),
'Val_1': tf.FixedLenFeature([], dtype=tf.float32),
'Val_2': tf.FixedLenFeature([], dtype=tf.float32)
}
sequence_features = {
'sequence': tf.FixedLenSequenceFeature((3,), dtype=tf.int64),
'pclasses' : tf.FixedLenSequenceFeature((3,), dtype=tf.float32),
}
def parse(record):
parsed = tf.parse_single_sequence_example(
record,
context_features=context_features,
sequence_features=sequence_features
)
return parsed
filenames = [os.path.join(os.getcwd(),f"dummy_sequences_{i}.tfrecords") for i in range(3)]
dataset = tf.data.TFRecordDataset(filenames).map(lambda r: parse(r))
iterator = tf.data.Iterator.from_structure(dataset.output_types,
dataset.output_shapes)
next_element = iterator.get_next()
training_init_op = iterator.make_initializer(dataset)
for _ in range(2):
# Initialize an iterator over the training dataset.
sess.run(training_init_op)
for _ in range(3):
ne = sess.run(next_element)
print(ne)