在pytorch中初始化一个可微参数

Initializing a differentiable param in pytorch

我正在尝试在 pytorch 模型中定义一组新参数 B。我想用模型的当前权重初始化新参数 W

问题: 我希望这些参数 B 是可微分的,但是 autograd 不应将它们的历史跟踪到 W(因此 B应该有一个没有引用 W 的新内存)。正确使用的函数是什么?

我了解 B = W.clone() 将导致在微分时自动跟踪 B 到 W 的历史记录。我也明白 B = W.detach().clone() 将不可微分。


编辑:

我相信 B = nn.Parameter(W.detach().clone()) 应该是正确的功能。这是正确的吗?如果是,这是最简单的函数吗?

有几种方法可以做到,其中之一是

B = W.clone().detach()

我想到的另一个优雅的是

B = torch.new_tensor(x, requires_grad=True)

可读性更好,the doc says它们是等价的。

如果你想把它作为参数传给nn.Module,当然要用

包起来
self.B = nn.Parameter(...)