gpt4 book ai didi

python - TensorFlow 数据集 : shuffle before map (map_and_batch)?

转载 作者:太空宇宙 更新时间:2023-11-03 11:39:46 25 4
gpt4 key购买 nike

TensorFlow 提供的股票示例在 shuffle 之前使用 map,如下所示:

filenames = ["/var/data/file1.tfrecord", "/var/data/file2.tfrecord"]
dataset = tf.data.TFRecordDataset(filenames)
dataset = dataset.map(...)
dataset = dataset.shuffle(buffer_size=10000)
dataset = dataset.batch(32)

然而,performance guide pageone of the GitHub issues建议出于性能原因,最好使用 map_and_batch。但是由于 shuffle 卡在中间,我不太确定该怎么做。看起来甚至在 mapbatch 完成工作之前应用 shuffle,如下所示:

filenames = ["/var/data/file1.tfrecord", "/var/data/file2.tfrecord"]
dataset = tf.data.TFRecordDataset(filenames)
dataset = dataset.shuffle(buffer_size=10000)
dataset = dataset.apply(tf.contrib.data.map_and_batch(..., batch_size=32))

我想知道这是否会引入任何我可能没有预料到的问题,而不是 TensorFlow 提供的股票示例。我希望两个代码做同样的事情,但第二个代码做的更快;在最坏的情况下以相同的速度。

最佳答案

这可能是个案问题。几天前我遇到了一个问题 my computer will freeze when I call dataset.shuffle(180000) .事实证明,如果我在 shuffle() 之前进行 map(),它会卡住;但是如果我在 shuffle() 之后进行 map(),则不会。

感觉(至少根据我的经验),在改组时,tensorflow 可能正在改组内存中的实际张量,而不是它们的引用(或“指针”)。就我而言,我的文件是具有 112x112 像素和 3 个颜色 channel 的图像。如果我在 shuffle() 之前使用 map(),shuffle(180000) 将使用 112x112x3 数字随机播放 180000 个张量;但是如果我在 map() 之前进行 shuffle(),shuffle(180000) 将只随机播放 180000 个张量,每个张量只包含一个短字符串(文件名如“abc-001.jpeg”)。

根据我上面的经验,在没有任何并行计算的情况下,如果你要 map() 的数据的大小比它们的文件名大得多(通常是这种情况),那么 shuffle() before map( ) 应该比 shuffle() 之前的 map() 更快。

在股票的例子中,我认为是因为股票数据比较小。与我的一个张量中的 112x112x3 数字不同,每个股票数据点应该只有 4 个价格(开盘价、收盘价、最高价、最低价)和 1 个时间(年-月-日-小时:分钟:秒)。在这种情况下,shuffle() 数据不会成为问题。

总而言之,我认为在大多数情况下(文件大小 > 文件名大小),shuffle() 在 map() 之前更好。

关于python - TensorFlow 数据集 : shuffle before map (map_and_batch)?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/51909997/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com