backward的 retain_variables=True与retain_graph=True 区别及应用

首先 :retain_variables=True 与 retain_graph=True   没有任何区别 

        只是 retain_variables 会在pytorch 新版本中被取消掉,将使用 retain_graph 。

        所以 在使用 retain_variables=True 时报错:

        TypeError: backward() got an unexpected keyword argument 'retain_variables'

 

应用:

两者都是backward()的参数   默认 retain_graph=False,

也就是反向传播之后这个计算图的内存会被释放,这样就没办法进行第二次反向传播了,

所以我们需要设置为 retain_graph=True,

loss_1.backward(retain_graph=True) 

 

retain_graph:

每次 backward() 时,默认会把整个计算图free掉。一般情况下是每次迭代,只需一次 forward() 和一次 backward() ,前向运算forward() 和反向传播backward()是成对存在的,一般一次backward()也是够用的。但是不排除,由于自定义loss等的复杂性,需要一次forward(),多个不同loss的backward()来累积同一个网络的grad,来更新参数。于是,若在当前backward()后,不执行forward() 而可以执行另一个backward(),需要在当前backward()时,指定保留计算图,即backward(retain_graph)。

 

 

参考链接:https://www.pytorchtutorial.com/pytorch-backward/     不过这篇写的是旧版本的了!

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值