我创建了一个tensorflow数据集,使其可重复,将其改组,分成若干批,并构造了一个迭代器以获取下一批。但是,当我这样做时,有时元素是重复的(在批内和批间),尤其是对于小型数据集。为什么?
不像您自己的答案中所述,不,改组然后重复进行并不能解决您的问题。
问题的主要根源是先批处理,然后随机播放/重复。这样,批次中的项目将始终从输入数据集中的连续样本中获取。 批处理应该是您在输入管道中执行的最后一项操作。
现在,是在你随机,重复和批次的顺序有差别,但它不是你的想法。引用输入管道性能指南:
如果在随机变换之前应用重复变换,则时期边界将变得模糊。也就是说,某些元素可以在其他元素出现一次之前重复进行。另一方面,如果在重复变换之前应用了shuffle转换,则在与shuffle转换的内部状态初始化有关的每个时期的开始,性能可能会降低。换句话说,前者(随机播放之前重复播放)提供了更好的性能,而后者(重复播放之前重复播放)提供了更强的排序保证。
重复,然后随机播放:您无法保证所有样本都在一个时期内得到处理。
随机播放,然后重复:确保在下一次重复开始之前将所有样本都进行处理,但是会造成(轻微)性能损失。
无论您选择哪个,在批处理之前都要这样做。