Loss.backward()
若只有一个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()相关推荐
- Pytorch:optim.zero_grad()、pred=model(input)、loss=criterion(pred,tgt)、loss.backward()、optim.step()的作用
在用pytorch训练模型时,通常会在遍历epochs的每一轮batach的过程中依次用到以下三个函数 optimizer.zero_grad(): loss.backward(): optimize ...
- pytorch-->optimizer.zero_grad()、loss.backward()、optimizer.step()和scheduler.step()
优化器optimizer的作用 优化器就是需要根据网络反向传播的梯度信息来更新网络的参数,以起到降低loss函数值的作用. 一般来说,以下三个函数的使用顺序如下: # compute gradient ...
- loss.backward(),scheduler(), optimizer.step()的作用
在用pytorch训练模型时(pytorch1.1及以上版本),通常会在遍历epochs的过程中依次用到optimizer.zero_grad(),loss.backward()和optimizer. ...
- torch之optimizer.step() 和loss.backward()和scheduler.step()的关系与区别
torch之optimizer.step() 和loss.backward()和scheduler.step()的关系与区别 由于接触torch时间不久,所有对此比较困惑,遇到如下博文解释十分详细,故 ...
- Pytorch optimizer.step() 和loss.backward()和scheduler.step()的关系与区别
参考 Pytorch optimizer.step() 和loss.backward()和scheduler.step()的关系与区别 - 云+社区 - 腾讯云 首先需要明确optimzier优化 ...
- 理解optimizer.zero_grad(), loss.backward(), optimizer.step()的作用及原理
在用pytorch训练模型时,通常会在遍历epochs的过程中依次用到optimizer.zero_grad(),loss.backward()和optimizer.step()三个函数,如下所示: ...
- optimizer.zero_grad(), loss.backward(), optimizer.step()的理解及使用
optimizer.zero_grad,loss.backward,optimizer.step 用法介绍 optimizer.zero_grad(): loss.backward(): optimi ...
- 梯度值与参数更新optimizer.zero_grad(),loss.backward、和optimizer.step()、lr_scheduler.step原理解析
在用pytorch训练模型时,通常会在遍历epochs的过程中依次用到optimizer.zero_grad(),loss.backward.和optimizer.step().lr_schedule ...
- Pytorch的model.train() model.eval() torch.no_grad() 为什么测试的时候不调用loss.backward()计算梯度还要关闭梯度
使用PyTorch进行训练和测试时一定注意要把实例化的model指定train/eval model.train() 启用 BatchNormalization 和 Dropout 告诉我们的网络,这 ...
最新文章
- Ubuntu18彻底删除MySQL5.7数据库
- 在Ubuntu 14.04 64bit下编译安装rtmpdump并调试输出
- GitHub使用教程for Eclipse
- 自学python还是报班-学习Python报培训班真的有必要吗?
- 关于Oracle中in,exists 与 not in, not exists
- BZOJ 1412 狼和羊的故事
- linux面试题-基础题1
- python的imread、newaxis
- Teleport 开源堡垒机的使用
- xmx java_为什么我的Java进程比Xmx消耗更多的内存?
- java 快速io_Java编程在ICPC快速IO实现源码
- 信息学奥赛C++语言:的士收费
- 怎么把GMS的软件转到HMS
- snmp是什么层协议_率先拥抱TSN——CC-Link发布新一代网络协议CC-Link IE TSN
- 2017 【第八届蓝桥杯省赛】 C/C++ B组
- 小丁的Spring笔记一(概述)
- 对《java程序员上班那点事》笔者对数组占用内存质疑
- php gps 车辆定位,员工GPS解决方案
- 计算机基础实验教程第二版苏州大学出版社,计算机基础与实验
- 八年成就开发梦——IT精英中的活雷锋郭红俊