关于tf.contrib.data.Dataset(来自TensorFlow 1.2,请参见此处和此处)用法:当我repeat(与多个时期)一起使用shuffle(如同read_batch_features内部)时,我会在一些时期结束时注意到什么,以及当前时代是什么?此外,当纪元结束时,是ShuffleDataset等待首先将所有东西出列,还是已经填充了下一个纪元的更多数据?在上一个时代,或者如果我不使用repeat,是否会将ShuffleDataset所有剩余数据出列,例如tf.RandomShuffleQueue在关闭后出列的数据?
我目前的解决方案,这也给了我更多的控制权:我不会使用,repeat但是只使用一次数据并使用ShuffleDataset像洗牌一样RandomShuffleQueue,然后在某些时候我得到OutOfRangeError并且我知道我已经到了时代的末尾.然后我重新初始化迭代器,就像这里描述的那样.
mrr*_*rry 12
行为Dataset.shuffle()取决于管道中相对于以下内容的位置Dataset.repeat():
如果你shuffle 之前的repeat,输出的顺序将首先生产的所有记录的时代i,从时代的任何记录之前i + 1.
如果shuffle 之后的repeat,输出的序列可产生从历元的记录i时期之前或之后i + 1(和,历元i + k,以概率与所述增加buffer_size和与减小k).
如果你想在时期之间进行一些计算,并避免混合来自不同时期的数据,那么最简单的方法是避免repeat()并OutOfRangeError在每个时代结束时捕捉到它们.
您可以构建一些更有趣的流水线来跟踪纪元数.例如,您可以将纪元编号编码为每个元素的组件:
dataset = (
Dataset.range(None).flat_map(lambda epoch_num:
Dataset.zip(
(Dataset.from_tensors(epoch_num).repeat(), # Infinite repeat of `epoch_num`.
..., # Definition of a Dataset over a single epoch.
)
)
)
)
Run Code Online (Sandbox Code Playgroud)
...在哪里...是Dataset为单个纪元定义a的表达式,包括批处理和混洗.
| 归档时间: |
|
| 查看次数: |
5340 次 |
| 最近记录: |