我的理解是,为每个时期改组训练样本是一种好习惯,这样每个小批量包含整个数据集的随机样本。如果我将整个数据集转换为包含TFRecords的单个文件,那么如何在不加载整个数据集的情况下实现这种改组?我的理解是没有对TFRecord文件的有效随机访问。因此,具体而言,我正在寻找有关如何在此方案中使用TFRecord文件的指导。
答案 0 :(得分:6)
不是 - 你可以通过将输入分成多个输入数据文件,然后对它们进行处理as explained in this answer来改善混音。
如果您需要接近"完美"洗牌,你需要把它读进记忆中,但在大多数事情的实践中,你可能会得到足够好的"通过分成100或1000个文件,然后使用足够大的shuffle队列来保持8-16个文件的数据,从而进行改组。
我脑子里痒痒地写了一个可以溢出到磁盘的外部随机随机队列,但它在我的优先级列表上非常低 - 如果有人想贡献一个,我就是#39 ;我自愿审查它。 :)
答案 1 :(得分:0)
实际上,在保存到TFRecords之前,您现在不必担心改组。这是因为(目前)推荐的读取TFRecords的方法使用tf.data.TFRecordDataset
来实现.shuffle()
方法。