PyTorch中初始化无原权重梯度历史关联的可微分参数的方法
解答
你给出的B = nn.Parameter(W.detach().clone())写法完全正确,同时这就是满足你需求的最简标准实现。
逻辑拆解
W.detach()会直接切断张量和原有计算图的关联,返回的张量不会携带任何和W相关的梯度历史,autograd自然不会追踪B到W的关联路径,符合你不希望梯度回传到W的要求。.clone()会为新张量开辟完全独立的内存空间,B和W不存在任何内存共享或引用关系,后续你对B的任意修改、参数更新都不会影响到原有权重W。- 外层用
nn.Parameter()包装后,会自动将张量的requires_grad属性设置为True,把B标记为模型的可训练参数,具备正常的可微分属性,后续前向传播产生的梯度只会正常更新到B本身。
注意
不要省略.clone()步骤,如果直接写nn.Parameter(W.detach()),B会和W共享同一块内存,不符合你要求的独立占用内存的需求。
内容的提问来源于stack exchange,提问作者Blade
相关产品推荐
相关产品推荐

