我想知道是否设置Keras模型。将steps_per_epoch参数调整为小于(数据集中的样本数/批大小)的固定值将始终使用数据集中的相同样本(从样本0到样本[(steps_per_epoch*批大小)-1]),从而减小训练集的有效大小,还是从每个历元的批量大小的训练集(不替换)中获取每个历元的随机样本?
Rgds。
亚历克斯
通过在自定义批生成器中添加print()
行,您可以在培训期间轻松查看每个批中的元素。您将看到批次在每个时代之间随机排列(但如果shuffle
设置为False
,则每个批次中的样本将不会排列)。
例如,考虑10个样本的数据集,其中每一个样本都可以用唯一的数字来标识。比如说,如果batch\u size=2
,shuffle=False
和steps\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_1
,batch_3
等等。。。等等,直到训练结束。
因此,即使steps_per_epoch
参数小于重新命令的size_of_dataset//batch_size
,我们也可以推断批次仍然是随机置换的,这意味着您的模型在训练期间仍然可以看到整个数据集。请注意,这个问题是微不足道的schffle=True
,因为批处理中的元素将在整个数据集中的每个时代随机生成。
最后,我只想和你分享这个答案,它描述了一个简化的steps_per_epoch
的有趣用法。