【问题标题】:If Keras steps_per_epoch argument is set to value less than (num. samples / batch size) will samples used in every epoch be always the same?如果 Keras steps_per_epoch 参数设置为小于 (num. samples / batch size) 的值,每个 epoch 中使用的样本是否总是相同的?
【发布时间】:2020-12-11 18:50:19
【问题描述】:

我想知道是否将 Keras model.fit steps_per_epoch 参数设置为小于(数据集中的样本数/批量大小)的固定值将始终使用数据集中的相同样本(从样本 0 到样本 [(steps_per_epoch*batch_size)-1]),因此减少了训练集的有效大小,还是在每个 epoch 中从训练集中(不替换)大小为 batch_size 的 steps_per_epoch 随机样本?

Rgds.

亚历克斯

【问题讨论】:

    标签: python keras


    【解决方案1】:

    通过在自定义批处理生成器中添加print() 行,您可以轻松地尝试在训练期间查看每个批处理中的元素。您会看到您的批次在每个时期之间随机排列(但如果 shuffle 设置为 False,则每个批次中的样本不会)。

    以一个包含 10 个样本的数据集为例,其中每个样本都可以通过唯一的编号进行标识。如果,假设batch_size = 2shuffle = Falsesteps_per_epoch = 10//2 = 5,那么在第一个时期,批次将按顺序调用(batch_1 = [1,2]batch_2 = [3,4]、...、batch_5 = [9,10])。但是在这个 epoch 之后,批次将被随机排列:例如,第二个 epoch batch_4 = [7,8],然后是 batch_1batch_3 等等......直到训练结束。

    因此,即使steps_per_epoch 参数小于推荐的size_of_dataset // batch_size,我们可以推断批次仍然会随机排列,这意味着您的模型在训练期间仍然会看到整个数据集。请注意,shuffle = True 这个问题很简单,因为批次中的元素将在每个时期从整个数据集中随机生成。


    最后,我只是想与您分享this answer,它描述了减少steps_per_epoch 的有趣用法。

    【讨论】:

    • 非常感谢您的回复,正是我需要澄清的问题
    • 不客气!如果这个答案符合您的问题和想法,我很高兴您验证它;)
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2019-11-06
    • 1970-01-01
    • 2020-12-17
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多