【问题标题】:Initializing a differentiable param in pytorch在pytorch中初始化一个可微参数
【发布时间】:2021-10-13 23:35:14
【问题描述】:

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

问题:我希望这些参数 B 是可区分的,但 autograd 不应该将它们的历史跟踪到 W(所以 B 应该有一个新的内存,而不是参考 @987654326 @)。正确的函数是什么?

我了解B = W.clone() 会在区分时导致 B 到 W 的 autograd 跟踪历史记录。我也知道B = W.detach().clone() 是不可区分的。


编辑:

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

【问题讨论】:

  • “希望参数B 可区分”是什么意思?你的意思是应该为它们计算梯度吗?
  • @akshayk07 应该是可计算的。

标签: pytorch


【解决方案1】:

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

B = W.clone().detach()

我想到的另一个优雅的是

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

这更易读,the doc says 它们是等价的。

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

self.B = nn.Parameter(...)

【讨论】:

    猜你喜欢
    • 2021-11-16
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2018-09-01
    • 1970-01-01
    • 2019-01-26
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多