如何加载“重量标准化”模型的权重?

时间:2020-07-16 15:29:08

标签: computer-vision pytorch pre-trained-model

使用此链接:pytorch-classification文件夹中的https://github.com/joe-siyuan-qiao/WeightStandardization我正在使用resnet50进行分类任务,

这就是我所做的-从此处复制代码:https://github.com/joe-siyuan-qiao/pytorch-classification/blob/e6355f829e85ac05a71b8889f4fff77b9ab95d0b/models/imagenet/resnet.py

做了-模型= l_resnet50() 现在我们有了使用gn和ws的resnet50模型,但后来我试图加载该仓库作者提供的resnet50重量文件

但是我得到这个错误:

RuntimeError: Error(s) in loading state_dict for ResNet:
    Missing key(s) in state_dict: "layer3.6.conv1.weight", "layer3.6.bn1.weight", "layer3.6.bn1.bias", "layer3.6.conv2.weight", "layer3.6.bn2.weight", "layer3.6.bn2.bias", "layer3.6.conv3.weight", "layer3.6.bn3.weight", "layer3.6.bn3.bias", "layer3.7.conv1.weight", "layer3.7.bn1.weight", "layer3.7.bn1.bias", "layer3.7.conv2.weight", "layer3.7.bn2.weight", "layer3.7.bn2.bias", "layer3.7.conv3.weight", "layer3.7.bn3.weight", "layer3.7.bn3.bias", "layer3.8.conv1.weight", "layer3.8.bn1.weight", "layer3.8.bn1.bias", "layer3.8.conv2.weight", "layer3.8.bn2.weight", "layer3.8.bn2.bias", "layer3.8.conv3.weight", "layer3.8.bn3.weight", "layer3.8.bn3.bias", "layer3.9.conv1.weight", "layer3.9.bn1.weight", "layer3.9.bn1.bias", "layer3.9.conv2.weight", "layer3.9.bn2.weight", "layer3.9.bn2.bias", "layer3.9.conv3.weight", "layer3.9.bn3.weight", "layer3.9.bn3.bias", "layer3.10.conv1.weight", "layer3.10.bn1.weight", "layer3.10.bn1.bias", "layer3.10.conv2.weight", "layer3.10.bn2.weight", "layer3.10.bn2.bias", "layer3.10.conv3.weight", "layer3.10.bn3.weight", "layer3.10.bn3.bias", "layer3.11.conv1.weight", "layer3.11.bn1.weight", "layer3.11.bn1.bias", "layer3.11.conv2.weight", "layer3.11.bn2.weight", "layer3.11.bn2.bias", "layer3.11.conv3.weight", "layer3.11.bn3.weight", "layer3.11.bn3.bias", "layer3.12.conv1.weight", "layer3.12.bn1.weight", "layer3.12.bn1.bias", "layer3.12.conv2.weight", "layer3.12.bn2.weight", "layer3.12.bn2.bias", "layer3.12.conv3.weight", "layer3.12.bn3.weight", "layer3.12.bn3.bias", "layer3.13.conv1.weight", "layer3.13.bn1.weight", "layer3.13.bn1.bias", "layer3.13.conv2.weight", "layer3.13.bn2.weight", "layer3.13.bn2.bias", "layer3.13.conv3.weight", "layer3.13.bn3.weight", "layer3.13.bn3.bias", "layer3.14.conv1.weight", "layer3.14.bn1.weight", "layer3.14.bn1.bias", "layer3.14.conv2.weight", "layer3.14.bn2.weight", "layer3.14.bn2.bias", "layer3.14.conv3.weight", "layer3.14.bn3.weight", "layer3.14.bn3.bias", "layer3.15.conv1.weight", "layer3.15.bn1.weight", "layer3.15.bn1.bias", "layer3.15.conv2.weight", "layer3.15.bn2.weight", "layer3.15.bn2.bias", "layer3.15.conv3.weight", "layer3.15.bn3.weight", "layer3.15.bn3.bias", "layer3.16.conv1.weight", "layer3.16.bn1.weight", "layer3.16.bn1.bias", "layer3.16.conv2.weight", "layer3.16.bn2.weight", "layer3.16.bn2.bias", "layer3.16.conv3.weight", "layer3.16.bn3.weight", "layer3.16.bn3.bias", "layer3.17.conv1.weight", "layer3.17.bn1.weight", "layer3.17.bn1.bias", "layer3.17.conv2.weight", "layer3.17.bn2.weight", "layer3.17.bn2.bias", "layer3.17.conv3.weight", "layer3.17.bn3.weight", "layer3.17.bn3.bias", "layer3.18.conv1.weight", "layer3.18.bn1.weight", "layer3.18.bn1.bias", "layer3.18.conv2.weight", "layer3.18.bn2.weight", "layer3.18.bn2.bias", "layer3.18.conv3.weight", "layer3.18.bn3.weight", "layer3.18.bn3.bias", "layer3.19.conv1.weight", "layer3.19.bn1.weight", "layer3.19.bn1.bias", "layer3.19.conv2.weight", "layer3.19.bn2.weight", "layer3.19.bn2.bias", "layer3.19.conv3.weight", "layer3.19.bn3.weight", "layer3.19.bn3.bias", "layer3.20.conv1.weight", "layer3.20.bn1.weight", "layer3.20.bn1.bias", "layer3.20.conv2.weight", "layer3.20.bn2.weight", "layer3.20.bn2.bias", "layer3.20.conv3.weight", "layer3.20.bn3.weight", "layer3.20.bn3.bias", "layer3.21.conv1.weight", "layer3.21.bn1.weight", "layer3.21.bn1.bias", "layer3.21.conv2.weight", "layer3.21.bn2.weight", "layer3.21.bn2.bias", "layer3.21.conv3.weight", "layer3.21.bn3.weight", "layer3.21.bn3.bias", "layer3.22.conv1.weight", "layer3.22.bn1.weight", "layer3.22.bn1.bias", "layer3.22.conv2.weight", "layer3.22.bn2.weight", "layer3.22.bn2.bias", "layer3.22.conv3.weight", "layer3.22.bn3.weight", "layer3.22.bn3.bias". 
    Unexpected key(s) in state_dict: "bn1.running_mean", "bn1.running_var", "layer1.0.bn1.running_mean", "layer1.0.bn1.running_var", "layer1.0.bn2.running_mean", "layer1.0.bn2.running_var", "layer1.0.bn3.running_mean", "layer1.0.bn3.running_var", "layer1.0.downsample.1.running_mean", "layer1.0.downsample.1.running_var", "layer1.1.bn1.running_mean", "layer1.1.bn1.running_var", "layer1.1.bn2.running_mean", "layer1.1.bn2.running_var", "layer1.1.bn3.running_mean", "layer1.1.bn3.running_var", "layer1.2.bn1.running_mean", "layer1.2.bn1.running_var", "layer1.2.bn2.running_mean", "layer1.2.bn2.running_var", "layer1.2.bn3.running_mean", "layer1.2.bn3.running_var", "layer2.0.bn1.running_mean", "layer2.0.bn1.running_var", "layer2.0.bn2.running_mean", "layer2.0.bn2.running_var", "layer2.0.bn3.running_mean", "layer2.0.bn3.running_var", "layer2.0.downsample.1.running_mean", "layer2.0.downsample.1.running_var", "layer2.1.bn1.running_mean", "layer2.1.bn1.running_var", "layer2.1.bn2.running_mean", "layer2.1.bn2.running_var", "layer2.1.bn3.running_mean", "layer2.1.bn3.running_var", "layer2.2.bn1.running_mean", "layer2.2.bn1.running_var", "layer2.2.bn2.running_mean", "layer2.2.bn2.running_var", "layer2.2.bn3.running_mean", "layer2.2.bn3.running_var", "layer2.3.bn1.running_mean", "layer2.3.bn1.running_var", "layer2.3.bn2.running_mean", "layer2.3.bn2.running_var", "layer2.3.bn3.running_mean", "layer2.3.bn3.running_var", "layer3.0.bn1.running_mean", "layer3.0.bn1.running_var", "layer3.0.bn2.running_mean", "layer3.0.bn2.running_var", "layer3.0.bn3.running_mean", "layer3.0.bn3.running_var", "layer3.0.downsample.1.running_mean", "layer3.0.downsample.1.running_var", "layer3.1.bn1.running_mean", "layer3.1.bn1.running_var", "layer3.1.bn2.running_mean", "layer3.1.bn2.running_var", "layer3.1.bn3.running_mean", "layer3.1.bn3.running_var", "layer3.2.bn1.running_mean", "layer3.2.bn1.running_var", "layer3.2.bn2.running_mean", "layer3.2.bn2.running_var", "layer3.2.bn3.running_mean", "layer3.2.bn3.running_var", "layer3.3.bn1.running_mean", "layer3.3.bn1.running_var", "layer3.3.bn2.running_mean", "layer3.3.bn2.running_var", "layer3.3.bn3.running_mean", "layer3.3.bn3.running_var", "layer3.4.bn1.running_mean", "layer3.4.bn1.running_var", "layer3.4.bn2.running_mean", "layer3.4.bn2.running_var", "layer3.4.bn3.running_mean", "layer3.4.bn3.running_var", "layer3.5.bn1.running_mean", "layer3.5.bn1.running_var", "layer3.5.bn2.running_mean", "layer3.5.bn2.running_var", "layer3.5.bn3.running_mean", "layer3.5.bn3.running_var", "layer4.0.bn1.running_mean", "layer4.0.bn1.running_var", "layer4.0.bn2.running_mean", "layer4.0.bn2.running_var", "layer4.0.bn3.running_mean", "layer4.0.bn3.running_var", "layer4.0.downsample.1.running_mean", "layer4.0.downsample.1.running_var", "layer4.1.bn1.running_mean", "layer4.1.bn1.running_var", "layer4.1.bn2.running_mean", "layer4.1.bn2.running_var", "layer4.1.bn3.running_mean", "layer4.1.bn3.running_var", "layer4.2.bn1.running_mean", "layer4.2.bn1.running_var", "layer4.2.bn2.running_mean", "layer4.2.bn2.running_var", "layer4.2.bn3.running_mean", "layer4.2.bn3.running_var". 

然后我尝试将重量文件加载到torchvision的resnet50模型中,并且在该处工作正常,因此很明显,错误来自使用gn和ws修改过的resnet50,但是我该如何使用作者的预训练重量?作者在他的仓库中共享了预训练的重量链接,我无法在他设计的gn,ws resnet50模型中加载它,我只能将gnnet.ws的resnet50与他提供的resnet50重量文件一起使用,这意味着我不是能够承受他分享的重量,我在哪里犯错?

resnet50重量是从这里收集的:https://github.com/joe-siyuan-qiao/pytorch-classification/tree/e6355f829e85ac05a71b8889f4fff77b9ab95d0b

1 个答案:

答案 0 :(得分:0)

此错误有两个问题:

Missing keys:这些是在模型__init__()中指定的键(每个层的名称),但是在保存的文件中不存在。

Unexpected keys:这些是在已保存文件中找到的,模型中不存在的键。确保您将模型的图层命名为与保存时相同。

作为一个简短示例:

class Model(nn.Module)
   def __init__(**kwargs):
   super(Model).__init__()
   self.linear1 = nn.Linear(3,3)
   self.linear2 = nn.Linear(3,1)

state_dict中,图层另存为linear1.weight, linear2.weight, linear1.bias, linear2.bias。如果您在__init__()中更改图层的名称,则会遇到此错误。

相关问题