首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >在火炬中实现梯度积累的正确方法是什么?

在火炬中实现梯度积累的正确方法是什么?
EN

Stack Overflow用户
提问于 2020-09-09 15:57:00
回答 1查看 688关注 0票数 1

大致上有两种方式:

  1. 在每个批处理上调用loss.backward(),但每N批只调用optimizer.step()optimizer.zero_grad()。N个批次的梯度是求和的情况吗?因此,为了保持每批有效的学习速率相同,我们必须将的学习速率除以N?
  2. 累积损失而不是梯度,每N批调用(loss / N).backward()。这是很容易理解的,但它是否违背了节省内存的目的(因为N批的梯度是一次计算的)?学习速率不需要调整以保持每个有效批的相同学习速率,但是如果要保持每个示例相同的学习速率,则应该将乘以乘以N。

哪一种更好,还是更常用在火把-闪电之类的包装中?optimizer.zero_grad()似乎是一个适合梯度积累的地方,因此建议(1)。

EN

回答 1

Stack Overflow用户

发布于 2022-01-11 22:08:58

您可以使用PytorchLightning并获得这个框的特性,请参阅培训器参数accumulate_grad_batches,您也可以将它与gradient_clip_val配对,在文档中有更多信息。

票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/63815311

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档