注意:
此问题扩展到先前的question of mine。在该问题中,我询问了将一些伪数据存储为Example
和SequenceExample
的最佳方法,以试图了解哪种数据更类似于提供的伪数据。我提供了Example
和SequenceExample
结构的明确表述,并在回答中提供了一种编程的方式。
因为这仍然是很多代码,所以我提供了一个Colab(由Google托管的交互式jupyter笔记本)文件,您可以自己尝试使用该代码来提供帮助。所有必要的代码均已存在,并对其进行了慷慨的注释。
我正在尝试学习如何将我的数据转换为TF记录,因为声称的利益对于我的数据是值得的。但是,文档还有很多需要改进的地方,而试图深入学习的教程/博客(我见过)实际上只是接触表面或重新整理了现有的稀疏文档。
对于我的previous question中以及此处所考虑的演示数据,我编写了一个不错的类,其内容如下:
并可以采用6种形式之一对数据进行编码:
int64
)分开,并附加了元数据numpy.ndarray.tostring()
)分开,并附加了元数据示例,将序列/类作为字节字符串转储,并附加了元数据
SequenceExample,序列通道/类以数字类型分开,元数据作为上下文
这很好。
在Colab中,我展示了如何将伪数据全部写入同一文件以及单独的文件中。
我的问题是如何恢复这些数据?
我在链接文件中尝试了4次尝试。
为什么TFReader与TFWriter处于不同的子软件包下?
答案 0 :(得分:5)
已通过更新功能以包括形状信息并记住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)