在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(...)
我正在尝试在 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(...)