笔记:
这个问题延伸到我之前的一个问题.在那个问题中,我询问存储一些虚拟数据的最佳方法,Example
并SequenceExample
试图了解哪种数据更类似于提供的虚拟数据.我提供了明确的构造Example
和SequenceExample
构造,以及在答案中,这是一种编程方式.
因为这仍然是很多代码,我提供了一个Colab(由谷歌托管的交互式jupyter笔记本)文件,您可以自己尝试代码来协助.所有必要的代码都在那里,并慷慨地评论.
我正在尝试学习如何将我的数据转换为TF记录,因为声称的好处对于我的数据是值得的.然而,文档还有很多不足之处,而且我试图深入的教程/博客(我已经看过),实际上只是触及表面或重新存在的稀疏文档.
对于我在上一个问题中考虑的演示数据- 以及此处 - 我写了一个体面的课程:
具有n个通道的序列(在此示例中,它是基于整数的,具有固定长度并具有n个通道)
软标记的类概率(在这个例子中有n个类和基于浮点数)
一些元数据(在这个例子中是一个字符串和两个浮点数)
并且可以用以下6种形式之一编码数据:
例如,序列通道/类以数字类型(int64
在本例中)分开,并附加元数据
例如,将序列通道/类分隔为字节串(via numpy.ndarray.tostring()
),并附加元数据
示例,将序列/类转储为字节字符串,并附加元数据
SequenceExample,序列通道/类以数字类型分隔,元数据作为上下文分隔
SequenceExample,序列通道作为字节串分开,元数据作为上下文
SequenceExample,将序列和类转储为字节字符串,将元数据转储为上下文
这很好用.
在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)