loss.backward

如何计算:autograd包根据tensor进行过的数学运算来自动计算梯度
注意:1:autograd实现的。2:对tensor进行计算梯度。
之前损失计算:分割损失和边界损失计算正常。
踩坑1:模型有两个损失,分别为分割损失和边界损失,在loss function计算损失值。然后将损失值相加进行反向传播。其中分割损失采用了深监督,需要计算五次。之前的代码采用的append将所有损失放在一个列表中,通过sum相加,搜了一下,网上说append会不断地增加内存的消耗。因此推荐使用loss += loss.item().
问题就出现在这里:然后train就开始报错:
‘‘float has no attribution of backward’’。继续搜索发现回答是loss不是tensor格式。是因为item()函数将tensor转换为了float。
所以在
计算损失也就是loss.backward之前不能用loss.item()。修改为:loss += loss,这样loss就是tensor了,但是我的边界损失也是用的loss += loss.item()。那么也就是说我的边界损失也是float类型了。但是却可以正常运行:
在这里插入图片描述
于是继续搜索发现
tensor和float相加时候,会自动将float转换为tensor格式
但是,在反向传播时候却不能对边界损失进行反向更新,因此即使可以运行,结果也是错的,所以有多个分割损失和边界损失时候,不能用loss += loss.item()。loss.backward将损失反向传播,计算梯度,optimizer使用梯度下降法优化损失。
什么时候可以用呢:搜索发现在不需要损失梯度的地方可以用loss.item(),比如需要用logger记录损失时候可以使用。

  • 1
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值