gpt4 book ai didi

python - 关于 .shuffle、.batch 和 .repeat 的 Tensorflow 数据集问题

转载 作者:太空宇宙 更新时间:2023-11-04 04:07:42 25 4
gpt4 key购买 nike

我对使用 tf.Dataset 的 batch、repeat 和 shuffle 有疑问。

我不清楚 repeat 和 shuffle 是如何使用的。我知道 .batch 将决定有多少训练示例将进行随机梯度下降, .repeat.shuffle 的用途仍然不清楚对我来说。

第一个问题

即使在审查之后herehere , .repeat 用于在抛出 tf.errors.OutOfRangeError 时重复数据集。因此,在我的代码中,这是否意味着我不再需要实现:

try:
while True:
_ = sess.run(self.optimizer)

except tf.errors.OutOfRangeError:
pass

因为 .repeat 会在数据集用完后自动重复?什么时候停止?还是它永远不会停止,一旦经过一定数量的批处理(比如 1000),您只需要退出 while True 循环?

第二个问题

其次,使用 .shuffle 对我来说毫无意义。 .shuffle.batch() 是否意味着我有 100,000 个样本,将 1000 个随机放入带有 .shuffle 的缓冲区中,然后批处理说,其中 100 个带有 .batch()。据我了解,下一批将使用其中的 999 个样本,并将 1 个新样本放入缓冲区。所以如果我的样本没有顺序,那么 .shuffle 应该一起避免吗?如果使用 .batch,它仍然会从缓冲区中的 999+1 个批处理 100 个吗?

第三个问题

最后,如果我使用单独的 td.dataset 对象进行测试,我应该考虑什么顺序的 .shuffle.batch()?现在我使用:

sess.run(self.test_init)
try:
while True:
accuracy_batch = sess.run(self.accuracy)

except tf.errors.OutOfRangeError:
pass

与:

test_data = self.test_dataset.shuffle(self.batch_size).batch(self.batch_size)

我有超过 110,000 个训练示例可供使用,因此 self.batch_size 将设置我要用于测试准确性的样本数。所以,如果我只想在整个测试数据集上进行测试,我不会使用 .batch 吗?但是因为我用 while True 遍历了整个数据集,所以它没有区别吗?使用 .shuffle 我注意到我的准确性发生了变化,但没有它它们非常相似。这让我觉得 .shuffle 正在随机化批处理并且可能正在重用训练示例?

最佳答案

第一个问题:

没错 - 如果您提供数据集,则不再需要捕获 OutOfRangeError

repeat() 采用一个可选参数来表示它应该重复的次数。这意味着 repeat(10) 将遍历整个数据集 10 次。如果您选择省略参数,那么它将无限期地重复

第二个问题

Shuffle()(如果使用)应该在 batch() 之前调用 - 我们想要随机播放记录而不是批处理。

缓冲区首先通过按顺序添加您的记录来填充,然后,一旦填满,就会选择并发出一个随机的记录,并从原始来源读取一条新记录。

如果你有类似的东西

ds.shuffle(1000).batch(100)

然后为了返回单个批处理,将最后一步重复 100 次(将缓冲区保持在 1000)。批处理是一个单独的操作。

第三个问题

一般来说,我们根本不打乱测试集——只打乱训练集(无论如何我们都使用整个测试集进行评估,对吧?那为什么要打乱?)。

So, if I wanted to just test on the whole test dataset I wouldn't use .batch

嗯 - 并非如此(至少并非总是如此)。如果您的整个测试数据集不适合内存,您肯定需要使用批处理——这很常见。您可能想要测试整个数据集,但要以可管理的方式运行数字!

关于python - 关于 .shuffle、.batch 和 .repeat 的 Tensorflow 数据集问题,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/56944856/

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