Pytorch:Variable detach

举个栗子:

有两个网络F和G,其中y=F(x), z=G(y), 假设现在想通过z.bachward()实现z对y的求导,但是又不想y对x求导

那么怎么做呢?

# 第一种
y=F(x)
z=G(y.detach())
z.backward()

# 第二种
y=F(x)
y_ = y.detach_()
z=G(y_)
z.backward()

detach():返回一个新的从当前图中分离的Variable,且返回的Variable永远不会需要梯度,返回的Variable和被detach的Variable指向同一个tensor

detach_():把Variable作为叶子结点,从创建它的图中剥离出来

上面的栗子用两种方法都可以,但是如果y也想对F网络进行BP呢?就只能用第一种方法了,因为第二种已经把网络的输出y当作叶子结点从模型中detach(分离)出去了(˶‾᷄ ⁻̫ ‾᷅˵)

总之,用第一种总没错啦(>^ω^<)就目前的水平来看~

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值