问题描述
通常有两种方法:
-
每批调用
loss.backward()
,但每N批仅调用optimizer.step()
和optimizer.zero_grad()
。是否会总结 N个批次的梯度?因此,为了保持每个有效批次的学习率,我们必须将学习率除以N? -
累积损耗而不是梯度,并每N批调用
(loss / N).backward()
。这很容易理解,但是是否违反了节省内存的目的(因为同时计算了N个批次的梯度)?学习率不需要调整就可以保持每有效批次相同的学习率,但是如果要每个示例保持相同的学习率,则应乘以。
哪种更好,或更常用在诸如pytorch-lightning之类的软件包中? optimizer.zero_grad()
似乎是梯度累积的理想选择,因此,建议使用(1)。
解决方法
暂无找到可以解决该程序问题的有效方法,小编努力寻找整理中!
如果你已经找到好的解决方法,欢迎将解决方案带上本链接一起发送给小编。
小编邮箱:dio#foxmail.com (将#修改为@)