tensorflow数据集:用unbatching(batch -> map -> unbatch)还是只用map进行矢量化更高效?

问题描述 投票:0回答:1

TensorFlow建议在用map进行变换之前对数据集进行批处理,以实现变换的矢量化,减少开销。https:/www.tensorflow.orgguidedata_performance#vectorizing_mapping

然而,在有些情况下,你想在数据集上执行转换,然后在UNBATCHED数据集上做一些事情(例如,洗牌)。

我还没能找到任何东西来说明哪种方式更有效率。

1) dataset.map(my_transformations)

2) dataset.batch(batch_size).map(my_transformations).unbatch()

(2)由于用batch做了矢量化,减少了map开销,但由于之后要解批数据集,有额外的开销。

我也可以看到它是没有一个通用的规则。在我每次尝试新的数据集或转换(或硬件!)时,都要进行测试,这里有一个好的经验法则吗?我在网上看到好几个例子都用了(2),但没有解释,但我对这个问题没有直觉,所以......

先谢谢了!

EDIT: 我后来发现,至少在某些情况下,(2)的效率比(1)低很多。例如,在我们的图像数据集上,每一个 epoch 应用随机翻转和旋转(使用 .map 和内置的 TF 函数 tf.image.random_flip_left_right, tf.image.random_flip_up_down, 和 tf.image.rot90)进行数据增强需要 (2) 50% 的时间。我仍然不知道什么时候会出现这种情况,或者不是,但教程建议的方法至少有时是错误的。

tensorflow vectorization tensorflow-datasets
1个回答
0
投票

答案是(1)。https:/github.comtensorflowtensorflowissues40386

TF正在修改文档,以反映出来自非批次的开销通常(总是?)会高于来自矢量化转换的节省。

© www.soinside.com 2019 - 2024. All rights reserved.