关于detach

将variable参数从网络中隔离开。保持一部分的网络参数不变。


# y=A(x), z=B(y) 求B中参数的梯度,不求A中参数的梯度
y = A(x)
z = B(y.detach())
z.backward()

我后来的疑问是,他会在optimizer那里被更新吗?
看到一个解释是“该类的step函数会将构建loss的所有的Variable的参数进行更新”
那么detach的那个变量,就不会更新了。
另一个链接https://www.jianshu.com/p/f1bd4ff84926

v_c_detached = v_c.detach()

v_c_detached这个变量是不具有grad这个属性的。而且它和v_c共享一块内存(data)。
因此,detach所做的就是,重新声明一个变量,指向原变量的存放位置,但是requires_grad为false.更深入一点的理解是,计算图从detach过的变量这里就断了, 它变成了一个leaf_node.即使之后重新将它的requires_node置为true,它也不会具有梯度.

©著作权归作者所有,转载或内容合作请联系作者
【社区内容提示】社区部分内容疑似由AI辅助生成,浏览时请结合常识与多方信息审慎甄别。
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

相关阅读更多精彩内容

友情链接更多精彩内容