【问题标题】:Keras fit: What if my steps_per_epoch is fewer than the number of batches?Keras fit:如果我的 steps_per_epoch 小于批次数怎么办?
【发布时间】:2022-01-03 10:01:09
【问题描述】:

我在网上看到steps_per_epoch 被定义为数据集大小/批量大小。所以基本上,它是每个 epoch 中要查看/学习的批次数。

在下面的代码中,我在使用时间序列生成器处理后有 8 个批次。因此,如果我使用
steps_per_epoch=1,是否意味着每个 epoch 只需要查看/学习 1 个批次?

# univariate one step problem with mlp
from numpy import array
from keras.models import Sequential
from keras.layers import Dense
from pip.preprocessing.sequence import TimeseriesGenerator

# define dataset
series = array([1, 2, 3, 4, 5, 6, 7, 8, 9, 10]) # 10 samples before processing by the Generator

# define generator
timestep = 2
generator = TimeseriesGenerator(series, series, length=timestep, batch_size=1) 
# After processing, 8 batches with 1 sample each

# define model
model = Sequential()

model.add(Dense(100, activation='relu', input_dim=timestep))

model.add(Dense(1))
model.compile(optimizer='adam', loss='mse')

# fit model
model.fit_generator(generator, steps_per_epoch=1, epochs=200, verbose=0)

【问题讨论】:

    标签: python tensorflow keras deep-learning


    【解决方案1】:

    是的,您的模型将始终看到相同的批次,这是因为生成器在每个 epoch 后再次被调用,只有当生成器无法提供比steps_per_epoch 中指定的批次更多的批次时,您才会遇到问题。

    在这种情况下,您将收到生成器已用完数据的错误。

    要记住的要点是,使用生成器不会遍历所有数据库,这是因为每次启动 epoch 时都会重新初始化生成器。

    【讨论】:

    • 对不起,我不太明白下面的内容。如果改为steps_per_epoch = 8,则整个数据集将被看到/学习:要记住的要点是,使用生成器您不会遍历所有数据库,这是因为每次启动生成器时都会重新初始化时代。
    • 如果您将steps_per_epoch 例如设置为2,您可能会认为您的模型在 4 个 epoch 中看到了 8 个批次,因此您可以认为模型在第一个 epoch 中看到了前 2 个批次,第二个时期的第三个和第四个,第三个时期的第五个和第六个,第四个时期的最后一个,但这不是这种情况....相反,您的模型将看到每个 epoch 的前 2 个批次,模型将永远不会在其他 6 个批次上训练
    • 那么steps_per_epoch的目的是什么?为什么用户希望训练少于他们的整个训练集?谢谢
    • 这不是为了灵活性,如果你有一个生成器,你必须指定批次的数量,因为模型无法了解生成器在数据用完之前可以生成多少批次
    • 给你一个思路:如果你指定的steps_per_epoch的数量高于生成器可以产生模型的批次数量会给你一个错误,但是这个错误只有在模型在第一个 epoch 中到达生成器的末尾,而不是在模型初始化期间,这是因为模型在开始执行之前没有检查生成器,他只是相信你给他的数字
    猜你喜欢
    • 2018-11-11
    • 2016-10-24
    • 1970-01-01
    • 2022-08-05
    • 2023-03-09
    • 1970-01-01
    • 1970-01-01
    • 2019-04-26
    • 2022-07-25
    相关资源
    最近更新 更多