【问题标题】:Is it necessary to call Dataset.repeat()?是否需要调用 Dataset.repeat()?
【发布时间】:2021-01-02 12:08:07
【问题描述】:

tensorflow tutorial 中,我看到数据集只是像这样打乱了

AUTOTUNE = tf.data.experimental.AUTOTUNE
train_ds = train_ds.cache().shuffle(1000).prefetch(buffer_size=AUTOTUNE)

但我也看到其他人的代码,例如:

ds = ds.cache()
ds = ds.repeat() # ds is a dataset 
ds = ds.shuffle(buffer_size=1000)

我假设从技术上讲,数据集将在每个训练 epoch 后全部消耗,并且应该重复输入到下一个 epoch 的 shuffle 缓冲区。

但为什么第一个教程没有重复?我应该明确地调用 ds repeat 吗?

【问题讨论】:

    标签: tensorflow


    【解决方案1】:

    因此,基于documentation,repeat 确定了样本可以在给定数据集中重复多少次。

    dataset = tf.data.Dataset.from_tensor_slices([1, 2, 3])
    dataset = dataset.repeat(3)
    list(dataset.as_numpy_iterator())
    [1,2,3,1,2,3,1,2,3]
    

    理想情况下,您不必重复数据集。只有当您想查看它的多个样本时,它才会有所作为。根据您的洗牌,它只会在重复数据集后对其进行洗牌。并且请在repeat() 中有一些参数或值,不要将其保留为无。

    【讨论】:

    • 谢谢,但我在文档中看不到“在给定的时期或培训通行证”之类的措辞?
    • 我使用了训练 pass 或 epoch,因为它最终取决于数据集的使用方式。如果您在每个 epoch 或之后重新洗牌,并且不希望增加,您将不需要使用repeat。并且不要在计数为空的情况下使用重复,因为它将继续创建重复实例,直到缓冲区大小被填满。此外,我将删除 given epoch or training pass,因为它可能会造成混淆
    猜你喜欢
    • 2014-09-17
    • 1970-01-01
    • 2021-02-14
    • 1970-01-01
    • 1970-01-01
    • 2012-03-20
    • 2015-10-14
    • 2016-11-09
    相关资源
    最近更新 更多