提问者:小点点

如果Keras steps_per_epoch参数设置为小于(样本数/批次大小)的值,则每个epoch中使用的样本是否始终相同?


我想知道是否设置Keras模型。将steps_per_epoch参数调整为小于(数据集中的样本数/批大小)的固定值将始终使用数据集中的相同样本(从样本0到样本[(steps_per_epoch*批大小)-1]),从而减小训练集的有效大小,还是从每个历元的批量大小的训练集(不替换)中获取每个历元的随机样本?

Rgds。

亚历克斯


共1个答案

匿名用户

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

例如,考虑10个样本的数据集,其中每一个样本都可以用唯一的数字来标识。比如说,如果batch\u size=2shuffle=Falsesteps\u per\u epoch=10//2=5,那么在第一个epoch期间,批将按顺序调用(batch\u 1=[1,2]batch\u 2=[3,4],…,batch\u 5=[9,10])。但是在这个历元之后,批次将被随机排列:例如,我们将有第二个历元batch_4=[7,8],然后batch_1batch_3等等。。。等等,直到训练结束。

因此,即使steps_per_epoch参数小于重新命令的size_of_dataset//batch_size,我们也可以推断批次仍然是随机置换的,这意味着您的模型在训练期间仍然可以看到整个数据集。请注意,这个问题是微不足道的schffle=True,因为批处理中的元素将在整个数据集中的每个时代随机生成。

最后,我只想和你分享这个答案,它描述了一个简化的steps_per_epoch的有趣用法。