python - Tensorflow 1.10 TFRecordDataset - 恢复 TFRecord

标签 python tensorflow python-3.6 tensorflow-datasets tensorflow-estimator

注意事项:

  1. 这个问题延伸到之前的 question of mine .在那个问题中,我询问了将一些虚拟数据存储为 ExampleSequenceExample 的最佳方法,想知道哪种方法更适合与所提供的虚拟数据类似的数据。我提供了 ExampleSequenceExample 构造的明确公式,并在答案中提供了一种编程方式。

  2. 因为这仍然是很多代码,所以我提供了一个 Colab (由 google 托管的交互式 jupyter notebook)文件,您可以在其中自行尝试代码以提供帮助。所有必要的代码都在那里,并且有大量注释。

我正在尝试学习如何将我的数据转换为 TF 记录,因为声称的好处对我的数据来说是值得的。然而,文档还有很多不足之处,而试图更深入的教程/博客(我所看到的)实际上只是触及表面或重新散列现有的稀疏文档。

对于我的 previous question 中考虑的演示数据- 以及这里 - 我写了一个不错的类(class),需要:

  • 一个有 n 个 channel 的序列(在这个例子中它是基于整数的,具有固定长度和 n 个 channel )
  • 软标签类别概率(在本例中有 n 个类别和基于 float 的类别)
  • 一些元数据(在这个例子中是一个字符串和两个 float )

并且可以将数据编码为 6 种形式中的一种:

  1. 示例,序列 channel /类以数字类型(在本例中为 int64)分开,并添加了元数据
  2. 示例,将序列 channel /类分离为字节字符串(通过 numpy.ndarray.tostring())并附加元数据
  3. 示例,将序列/类转储为带有元数据的字节字符串

  4. SequenceExample,序列 channel /类以数字类型和元数据作为上下文分开

  5. SequenceExample,序列 channel 作为字节字符串和元数据作为上下文分开
  6. 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)

关于python - Tensorflow 1.10 TFRecordDataset - 恢复 TFRecord,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/52064866/

相关文章:

用于 debian 的 Tensorflow GPU

tensorflow - 用于特征缩减的 Conv 1x1 配置

python - 我可以在 Python 3.6 之前的版本中使用 secrets 模块吗?

python - 从python中的多值元素数组打印特定值

python - 使用 Strptime 时出现 ValueError

Python:使用 df1 的 2 列中的信息模拟 Excel 的索引匹配,用于查找 df2 中的位置

Tensorflow:成功恢复检查点后损失重置

apache2 - 将 mod_wsgi 从 python3.5 更改为 3.6

python - Jupyterhub/单用户共享卷

python - 如何将两个变量连接在一起以创建用户名?