变更批量大小后的初始周期数
我是一名新手, 我在一台没有显卡的普通电脑上训练一个简单的“狗与猫”模型,所以有时候需要暂停和继续。昨天我发现如果把批量大小(batch size)减小,性能会更好,所以我把它从128改成了64,然后把训练的轮数(epoch)从25增加到50(这样做对吗?)。我使用了一个回调函数,保存进度到save_at_{epoch}.keras文件,然后通过加载保存的模型来继续训练,并把初始轮数设置为与之匹配。现在假设我在第8轮/25轮的时候暂停,所以我有一个save_at_8.keras文件。现在我把批量大小改成64,应该把初始轮数设置为16还是8呢?
1 个回答
0
一个“周期”就是你对数据集进行一次完整的遍历。一个“步骤”则是从数据集中取出的一小批数据。所以,通常的训练循环看起来是这样的:
for epoch in epochs:
for step in len(dataset) // batch_size:
update_weights(dataset[step])
save_checkpoint(epoch)
所以,改变 batch_size
(每批数据的大小)会影响每个周期内进行的步骤数量,但不会改变周期的总数。这个周期的数量要么是固定的,要么有一个上限。
你可以从一个检查点继续训练,是否调整周期的数量由你决定,这其实并没有太大关系。
唯一需要注意的是,有些训练器有“预热”或者“学习率调度器”,理论上这些是基于执行的步骤数量来设定的。所以如果你在周期大于0的时候重新开始训练,而不调整这些参数,可能会出现一些问题。