我正在尝试更改张量内的特定值,例如我的卷积层根据真假掩模的偏差。
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 值作为填充值
我怎样才能实现我的目标?
您的第一次尝试几乎是正确的,但正如您提到的 torch.where 只创建一个新的张量。 您可以将新张量转换为 nn.Parameter 后将其设置为偏差,如下所示:
conv1.bias = torch.nn.parameter.Parameter(data=torch.where(mask.unsqueeze(0),benign,param), requires_grad=True)