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

2024-10-02 14:27:11 发布

您现在位置:Python中文网/ 问答频道 /正文

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

Rgds

亚历克斯


Tags: 数据model批量stepskeras样本perepoch
1条回答
网友
1楼 · 发布于 2024-10-02 14:27:11

通过在自定义批处理生成器中添加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])。但是在这个历元之后,批将被随机排列:例如,我们将有第二个历元batch_4 = [7,8],然后batch_1batch_3等等。。。等等,直到训练结束

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


最后,我只想与大家分享this answer,它描述了一个简化的steps_per_epoch的有趣用法

相关问题 更多 >