【问题标题】:Tensorflow Dataset API restore Iterator after completing one epoch完成一个 epoch 后,Tensorflow Dataset API 恢复迭代器
【发布时间】:2018-03-11 05:28:20
【问题描述】:

我有 190 个特征和标签,我的批量大小为 20,但经过 9 次迭代 tf.reshape 返回异常知道这是由于Iterator.get_next()。我如何恢复我的迭代器,以便它再次从头开始提供批次服务?

【问题讨论】:

  • 你能把最后一批比别人小的吗?如果是这样,您可以使用tf.contrib.data.batch_and_drop_remainder
  • 剩余批次对我来说很重要,我认为我可以做到这一点。但谢谢,我将通过自己的批处理代码创建。

标签: tensorflow tensorflow-datasets


【解决方案1】:

如果您想从 Dataset 的开头重新启动 tf.data.Iterator,请考虑使用 initializable 迭代器,您可以运行该操作来重新初始化迭代器:

dataset = ...  # A `tf.data.Dataset` instance.
iterator = dataset.make_initializable_iterator()
next_element = iterator.get_next()

train_op = ...  # Something that depends on `next_element`.

for _ in range(NUM_EPOCHS):
  # Initialize the iterator at the beginning of `dataset`.
  sess.run(iterator.initializer)

  # Loop over the examples in `iterator`, running `train_op`.
  try:
    while True:
      sess.run(train_op)

  except tf.errors.OutOfRangeError:  # Thrown at the end of the epoch.
    pass

  # Perform any per-epoch computations here.

有关不同类型Iterator 的更多详细信息,请参阅the tf.data programmer's guide

【讨论】:

  • 在 2.x 文档中找不到 make_initializable_iterator。是被删除了还是我错过了?
猜你喜欢
  • 2019-12-02
  • 2018-04-05
  • 1970-01-01
  • 2018-02-17
  • 1970-01-01
  • 2019-10-08
  • 2020-02-18
  • 2018-04-14
  • 1970-01-01
相关资源
最近更新 更多