TensorFlow建议在使用map进行转换之前批处理数据集,以向量化转换并减少开销:https://www.tensorflow.org/guide/data_performance#vectorizing_mapping
但是,在某些情况下,您需要对数据集执行转换,然后对UNBATCHED数据集执行某些操作(例如,随机播放)。
我找不到任何能表明效率更高的东西:
1)dataset.map(my_transformations)
2)dataset.batch(batch_size).map(my_transformations).unbatch()
(2)减少了用批处理矢量化处理后的地图开销,但因必须在以后取消对数据集的批处理而增加了开销。
我还可以看到没有通用规则。每次尝试新的数据集或转换(或硬件!)时都缺乏测试,这里是否有很好的经验法则?我看过几个在线使用的示例(2),没有任何解释,但是我对这个主题没有直觉,所以...
谢谢!
编辑:从那以后我发现,至少在某些情况下(2)比(1)效率低得多。例如,在我们的图像数据集上,每个时期应用随机翻转和旋转(使用.map和内置TF函数tf.image.random_flip_left_right,tf.image.random_flip_up_down和tf.image.rot90)进行数据扩充需要50个时间(2)延长%。我仍然不知道什么时候可以期望这种情况,但是教程的建议方法至少有时是错误的。
答案 0 :(得分:0)
答案是(1)。 https://github.com/tensorflow/tensorflow/issues/40386
TF正在修改文档,以反映出批处理的开销通常(总是?)要比向量化转换所节省的开销高。