若只有一个loss

outputs = model(inputs)
loss = criterrion(outputs,target)optimizer.zero_grad()
loss.backward()
optimizer.step()

(1)计算损失;

(2)清除之前的梯度 optimizer.zero_grad()

(3)loss.backward() ,计算当前梯度,反向传播

(4)根据当前梯度更新网络参数,一个batch数据会计算一次梯度,然后optimizer.step()更新。

loss1= Loss(output[0], target)
loss1.backward()
loss2= Loss(output[1], target)
loss2.backward()这样会报错RuntimeError: Trying to backward through the graph a second time,
but the buffers have already been freed. Specify retain_graph=True when calling backward the first time.因为pytorch,一张图只允许一次backward,每次进行完之后,中间的变量就会被释放掉。
所以loss2.backward()时计算图已经没了,就没办法计算梯度了。

解决办法是loss.backward(retain_grad=True)

即暂时不释放计算图,在后续训练过程中计算图不释放,会一直累积,因此需要在最后一个loss是释放掉计算图loss.backward(),放置OOM

Loss.backward()相关推荐

  1. Pytorch:optim.zero_grad()、pred=model(input)、loss=criterion(pred,tgt)、loss.backward()、optim.step()的作用

    在用pytorch训练模型时,通常会在遍历epochs的每一轮batach的过程中依次用到以下三个函数 optimizer.zero_grad(): loss.backward(): optimize ...

  2. pytorch-->optimizer.zero_grad()、loss.backward()、optimizer.step()和scheduler.step()

    优化器optimizer的作用 优化器就是需要根据网络反向传播的梯度信息来更新网络的参数,以起到降低loss函数值的作用. 一般来说,以下三个函数的使用顺序如下: # compute gradient ...

  3. loss.backward(),scheduler(), optimizer.step()的作用

    在用pytorch训练模型时(pytorch1.1及以上版本),通常会在遍历epochs的过程中依次用到optimizer.zero_grad(),loss.backward()和optimizer. ...

  4. torch之optimizer.step() 和loss.backward()和scheduler.step()的关系与区别

    torch之optimizer.step() 和loss.backward()和scheduler.step()的关系与区别 由于接触torch时间不久,所有对此比较困惑,遇到如下博文解释十分详细,故 ...

  5. Pytorch optimizer.step() 和loss.backward()和scheduler.step()的关系与区别

    参考   Pytorch optimizer.step() 和loss.backward()和scheduler.step()的关系与区别 - 云+社区 - 腾讯云 首先需要明确optimzier优化 ...

  6. 理解optimizer.zero_grad(), loss.backward(), optimizer.step()的作用及原理

    在用pytorch训练模型时,通常会在遍历epochs的过程中依次用到optimizer.zero_grad(),loss.backward()和optimizer.step()三个函数,如下所示: ...

  7. optimizer.zero_grad(), loss.backward(), optimizer.step()的理解及使用

    optimizer.zero_grad,loss.backward,optimizer.step 用法介绍 optimizer.zero_grad(): loss.backward(): optimi ...

  8. 梯度值与参数更新optimizer.zero_grad(),loss.backward、和optimizer.step()、lr_scheduler.step原理解析

    在用pytorch训练模型时,通常会在遍历epochs的过程中依次用到optimizer.zero_grad(),loss.backward.和optimizer.step().lr_schedule ...

  9. Pytorch的model.train() model.eval() torch.no_grad() 为什么测试的时候不调用loss.backward()计算梯度还要关闭梯度

    使用PyTorch进行训练和测试时一定注意要把实例化的model指定train/eval model.train() 启用 BatchNormalization 和 Dropout 告诉我们的网络,这 ...

最新文章

  1. Ubuntu18彻底删除MySQL5.7数据库
  2. 在Ubuntu 14.04 64bit下编译安装rtmpdump并调试输出
  3. GitHub使用教程for Eclipse
  4. 自学python还是报班-学习Python报培训班真的有必要吗?
  5. 关于Oracle中in,exists 与 not in, not exists
  6. BZOJ 1412 狼和羊的故事
  7. linux面试题-基础题1
  8. python的imread、newaxis
  9. Teleport 开源堡垒机的使用
  10. xmx java_为什么我的Java进程比Xmx消耗更多的内存?
  11. java 快速io_Java编程在ICPC快速IO实现源码
  12. 信息学奥赛C++语言:的士收费
  13. 怎么把GMS的软件转到HMS
  14. snmp是什么层协议_率先拥抱TSN——CC-Link发布新一代网络协议CC-Link IE TSN
  15. 2017 【第八届蓝桥杯省赛】 C/C++ B组
  16. 小丁的Spring笔记一(概述)
  17. 对《java程序员上班那点事》笔者对数组占用内存质疑
  18. php gps 车辆定位,员工GPS解决方案
  19. 计算机基础实验教程第二版苏州大学出版社,计算机基础与实验
  20. 八年成就开发梦——IT精英中的活雷锋郭红俊

热门文章

  1. hbase创建solr索引的超时问题
  2. find() python
  3. 如何让树莓派启动实现图形化界面和命令行模式的切换从而解决两个光标的问题
  4. [思维模式-12]:《如何系统思考》-8- 工具篇 - 因果回路图/系统循环图/系统控制图,系统思考的关键工具
  5. uni的numberbox怎么用_模拟器最强BIOS篇,如何使用uni-bios
  6. 实验一 利用ffmpeg进行视音频信息提取 |音视频技术
  7. 怎么安装linux操作系统
  8. Windows10系统重装
  9. 计算机网络—网关介绍
  10. App 崩溃(闪退)原因