相关文章推荐
完美的苹果  ·  【Vant】Vant 开发笔记 - ...·  1 年前    · 
欢乐的领带  ·  React技巧之将CSS作为props传递 ...·  2 年前    · 
威武的馒头  ·  linux ...·  2 年前    · 
玩命的小虾米  ·  gensim LDA模型的优劣评估 - 知乎·  2 年前    · 
豪气的勺子  ·  云原生数据湖分析DLA_零运维构建数仓_大数 ...·  2 年前    · 
小百科  ›  optimizer.zero_grad()开发者社区
梯度 target
失眠的红豆
2 年前
作者头像
狼啸风云
0 篇文章

optimizer.zero_grad()

前往专栏
腾讯云
开发者社区
文档 意见反馈 控制台
首页
学习
活动
专区
工具
TVP
文章/答案/技术大牛
发布
首页
学习
活动
专区
工具
TVP
返回腾讯云官网
社区首页 > 专栏 > 计算机视觉理论及其实现 > optimizer.zero_grad()

optimizer.zero_grad()

作者头像
狼啸风云
修改 于 2022-09-02 20:45:17
6.1K 1
修改 于 2022-09-02 20:45:17
举报

传统的训练函数,一个batch是这么训练的:

for i,(images,target) in enumerate(train_loader):
    # 1. input output
    images = images.cuda(non_blocking=True)
    target = torch.from_numpy(np.array(target)).float().cuda(non_blocking=True)
    outputs = model(images)
    loss = criterion(outputs,target)
    # 2. backward
    optimizer.zero_grad()   # reset gradient
    loss.backward()
    optimizer.step()            
  1. 获取loss:输入图像和标签,通过infer计算得到预测值,计算损失函数;
  2. optimizer.zero_grad() 清空过往梯度;
  3. loss.backward() 反向传播,计算当前梯度;
  4. optimizer.step() 根据梯度更新网络参数

简单的说就是进来一个batch的数据,计算一次梯度,更新一次网络,使用梯度累加是这么写的:

for i,(images,target) in enumerate(train_loader):
    # 1. input output
    images = images.cuda(non_blocking=True)
    target = torch.from_numpy(np.array(target)).float().cuda(non_blocking=True)
    outputs = model(images)
    loss = criterion(outputs,target)
    # 2.1 loss regularization
    loss = loss/accumulation_steps   
    # 2.2 back propagation
 
推荐文章
完美的苹果  ·  【Vant】Vant 开发笔记 - emdzz - 博客园
1 年前
欢乐的领带  ·  React技巧之将CSS作为props传递 - 掘金
2 年前
威武的馒头  ·  linux grep查看指定行数的内容_51CTO博客
2 年前
玩命的小虾米  ·  gensim LDA模型的优劣评估 - 知乎
2 年前
豪气的勺子  ·  云原生数据湖分析DLA_零运维构建数仓_大数据分析_数据库-阿里云
2 年前
今天看啥   ·   Py中国   ·   codingpro   ·   小百科   ·   link之家   ·   卧龙AI搜索
删除内容请联系邮箱 2879853325@qq.com
小百科 - 百科知识指南
© 2024 ~ 沪ICP备11025650号