【发布时间】:2017-11-21 00:32:37
【问题描述】:
我将项目中的 CIFAR-10 预处理管道替换为 Dataset API 方法,导致性能下降约 10-20%。
预处理是相当标准的: - 从磁盘读取图像 - 随机/裁剪和翻转 - 洗牌,批量 - 喂给模型
总的来说,我发现批处理现在快了 15%,但每隔一段时间(或者更准确地说,每当我重新初始化数据帧或期望重新洗牌时)批处理都会被阻塞很长时间(30 秒),总计以较慢的 epoch-per-epoch 处理速度。
这种行为似乎与内部散列有关。如果我在 ds.shuffle(buffer_size=N) 中减少 N 延迟会更短,但成比例地更频繁。将所有结果中的 shuffle 移除以延迟,就像将 buffer_size 设置为数据集大小一样。
在读取/缓存方面,有人可以解释 Dataset API 的内部逻辑吗?是否有任何理由期望 Dataset API 比手动创建的队列工作得更快?
我正在使用 TF 1.3。
【问题讨论】:
标签: performance tensorflow tensorflow-datasets