根据 true false mask 更改 Pytorch 模型层中的特定参数

问题描述 投票:0回答:1

我正在尝试更改张量内的特定值,例如我的卷积层根据真假掩模的偏差。

Mask = True/False mask
param = conv1.bias
benign = replacement tensor (of shape param, but i also only want the values where mask = True)

我尝试了什么

torch.where(mask.unsqueeze(0),benign,param)

-> 给出正确的张量,但不会操作/改变我的偏差的实际值,而是返回一个新的张量

param[mask.bool()] = benign[mask.bool()]

-> 引发运行时错误:需要 grad 的叶变量正在就地操作中使用。

param.masked_fill(mask.unsqueeze(0),benign[mask])

->不接受非 0-dim 值作为填充值

我怎样才能实现我的目标?

python machine-learning pytorch tensor
1个回答
0
投票

您的第一次尝试几乎是正确的,但正如您提到的 torch.where 只创建一个新的张量。 您可以将新张量转换为 nn.Parameter 后将其设置为偏差,如下所示:

conv1.bias  = torch.nn.parameter.Parameter(data=torch.where(mask.unsqueeze(0),benign,param), requires_grad=True)
© www.soinside.com 2019 - 2024. All rights reserved.