PyTorch-更改Conv2d的权重
由于某些原因,我似乎无法在PyTorch中分配Conv2d层的所有权重-我必须分两步完成。谁能帮我解决我做错了什么PyTorch-更改Conv2d的权重,pytorch,tensor,Pytorch,Tensor,由于某些原因,我似乎无法在PyTorch中分配Conv2d层的所有权重-我必须分两步完成。谁能帮我解决我做错了什么 layer = torch.nn.Conv2d(in_channels=1, out_channels=2, kernel_size=(2,2), stride=(2,2)) layer.state_dict()['weight'] 给我一个大小为(2,1,2,2)的张量 当我尝试这样分配权重时 layer.state_dict()['weight'] = torch.tenso
layer = torch.nn.Conv2d(in_channels=1, out_channels=2, kernel_size=(2,2), stride=(2,2))
layer.state_dict()['weight']
给我一个大小为(2,1,2,2)的张量
当我尝试这样分配权重时
layer.state_dict()['weight'] = torch.tensor([
[[[ 1, 2],
[3, 4]]],
[[[-1, -2],
[-3, -4]]]
])
重量不变。但是如果我这样做
layer.state_dict()['weight'][0] = torch.tensor([
[[[1, 2],
[3, 4]]],
])
layer.state_dict()['weight'][1] = torch.tensor([
[[[-1, -2],
[-3, -4]]],
])
重量会改变。为什么会这样?我不确定为什么不能直接分配它们,但实现您想要做的事情更合适的方法是
layer.load_state_dict({'weight': torch.tensor([[[[0.4738, -0.2197],
[-0.3436, -0.0754]]],
[[[0.1662, 0.4098],
[-0.4306, -0.4828]]]])}, strict=False)
如果使用您自己的重量,您可能需要使用torch.nn.functional.conv2d
layer.load_state_dict({'weight': torch.tensor([[[[0.4738, -0.2197],
[-0.3436, -0.0754]]],
[[[0.1662, 0.4098],
[-0.4306, -0.4828]]]])}, strict=False)