Pytorch 加载自定义模型的状态命令时出错

Pytorch 加载自定义模型的状态命令时出错,pytorch,Pytorch,我在加载模型的权重时遇到问题。这是模型的一些部分 class InceptionV4(nn.Module): def __init__(self, num_classes=1001): super(InceptionV4, self).__init__() # Special attributs self.input_space = None self.input_size = (299, 299, 3) self.m

我在加载模型的权重时遇到问题。这是模型的一些部分

class InceptionV4(nn.Module):

   def __init__(self, num_classes=1001):
       super(InceptionV4, self).__init__()
       # Special attributs
       self.input_space = None
       self.input_size = (299, 299, 3)
       self.mean = None
       self.std = None
       # Modules
       self.features = nn.Sequential(
           BasicConv2d(3, 32, kernel_size=3, stride=2),
           BasicConv2d(32, 32, kernel_size=3, stride=1),
           BasicConv2d(32, 64, kernel_size=3, stride=1, padding=1),
           Mixed_3a(),
           Mixed_4a(),
           Mixed_5a(),
           Inception_A(),
           Inception_A(),
           Inception_A(),
           ...
       )
       self.avg_pool = nn.AvgPool2d(8, count_include_pad=False)
       self.last_linear = nn.Linear(1536, num_classes)
我尝试保存权重,类似于
torch.save(model.state\u dict(),weight\u name)
然后再次重新加载
model.load\u state\u dict(torch.load(weight\u name))
但有以下错误:

Missing key(s) in state_dict: "features.0.conv.weight", "features.0.bn.weight", "features.0.bn.bias", "features.0.bn.running_mean", "features.0.bn.running_var", "features.1.conv.weight", "features.1.bn.weight", "features.1.bn.bias", "features.1.bn.running_mean", "features.1.bn.running_var", "features.2.conv.weight", "features.2.bn.weight
而且:

Unexpected key(s) in state_dict: "conv.0.conv1.0.weight", "conv.0.conv1.0.bias", "conv.0.conv1.2.weight", "conv.0.conv1.2.bias", "conv.0.conv1.2.running_mean", "conv.0.conv1.2.running_var", "conv.0.conv1.2.num_batches_tracked", "conv.0.conv2.0.weight", "conv.0.conv2.0.bias", "conv.0.conv2.2.weight", "conv.0.conv2.2.bias", "conv.0.conv2.2.running_mean", "conv.0.conv2.2.running_var", "conv.0.conv2.2.num_batches_tracked", "conv.1.conv1.0.weight", "conv.1.conv1.0.bias", "conv.1.conv1.2.weight", "conv.1.conv1.2.bias", "conv.1.conv1.2.running_mean", "conv.1.conv1.2.running_var", "conv.1.conv1.2.num_batches_tracked

有什么提示吗?提前谢谢。

这个问题我已经面对过好几次了。该错误表示您的模型
状态_dict
与您加载的
预训练权重
具有不同的名称

我在torchvision的model zoo中没有看到
Inception\u v4
的预训练模型,因此很难准确地判断您的
InceptionV4
类在哪些方面存在dict不匹配的问题

无论从何处获取重量,都可以使用
预训练的
文件,但关键是要定义与
预训练的
模型代码相同的模型,并且可以顺利加载重量文件

以下是代码与模型不同的一些指标:


#更改self.features->self.conv:这有助于解决名称不匹配的问题。
self.conv=nn.Sequential(…)
#Google如何更改当前pytorch版本中的BatchNorm
#以及定义了预训练模型的较早的pytorch版本。
conv.1.conv1.2.num_批次_跟踪#在pytorch版本0.4或更高版本中不推荐使用它
提示是:


#定义与原始模型相同的模型(或要重用的零件)
希望这有帮助:)