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或更高版本中不推荐使用它
提示是:
#定义与原始模型相同的模型(或要重用的零件)
希望这有帮助:)