Pytorch 无法通过图层名称手动指定新参数

Pytorch 无法通过图层名称手动指定新参数,pytorch,setattr,Pytorch,Setattr,我正在尝试手动为我的pytorch模型指定新权重。我可以这样分配新权重: 将scipy.io导入为sio 进口火炬 caffe_参数=sio.loadmat('export_conv1_1.mat')) net.conv1_1.weight=torch.nn.参数(torch.from_numpy(caffe_参数['w'])) net.conv1_1.bias=torch.nn.参数(torch.from_numpy(caffe_参数['b')) caffe_参数=sio.loadmat('e

我正在尝试手动为我的pytorch模型指定新权重。我可以这样分配新权重:

将scipy.io导入为sio
进口火炬
caffe_参数=sio.loadmat('export_conv1_1.mat'))
net.conv1_1.weight=torch.nn.参数(torch.from_numpy(caffe_参数['w']))
net.conv1_1.bias=torch.nn.参数(torch.from_numpy(caffe_参数['b'))
caffe_参数=sio.loadmat('export_conv2_1.mat'))
net.conv2_1.weight=torch.nn.参数(torch.from_numpy(caffe_参数['w']))
net.conv2_1.bias=torch.nn.参数(torch.from_numpy(caffe_参数['b'))
因为我有很多层,所以我不想通过它的名称手动分配每个层。相反,我更希望在图层名称列表上循环并自动指定它们。大概是这样的:

varList=['conv2_1','conv2_2']
对于varList中的名称:
caffe_参数=sio.loadmat(rootDir+'export_'+name+'.mat')
setattr(净,名称+'.weight',torch.nn.参数(torch.from_numpy(caffe_参数['w']))
setattr(net,name+'.bias',torch.nn.参数(torch.from_numpy(caffe_参数['b']))

不幸的是,这不起作用。我猜
setattr
既不适用于pytorch Weights,也不适用于类型为
layername.weight
的属性,这意味着要分配的属性相对于
net

具有深度2。以下工作是否有效

for name in varList:
    caffe_params = sio.loadmat(rootDir + 'export_' + name + '.mat')
    getattr(net, name).weight.data.copy_(torch.from_numpy(caffe_params['w']))
    getattr(net, name).bias.data.copy_(torch.from_numpy(caffe_params['b']))