我正在使用ResNet进行神经网络分类,并希望对预训练网络和非预训练网络进行比较。但是,我确实想使用偏置项,这不是Pytorch的ResNet模块中的默认设置。
有没有办法包括一个预先训练过的模型,并在此基础上使用偏见术语?
作为我当前代码的一个非常简短的片段,我从这里重新定义了ResNet体系结构-- https://pytorch.org/vision/0.8/_modules/torchvision/models/resnet.html和设置偏差= True
net = resnet18(pretrained=True)
net.fc = nn.Linear(512, num_classes)
现在最明显的错误是
错误(S):为ResNet加载state_dict:缺少state_dict中的键:“卷积1”、“Layer1.0.卷积1”、“layer1.0.卷积2.偏倚”、“layer1.1.卷积1.偏倚”、“layer1.1.卷积2.偏置”、“layer2.0.卷积1偏倚”、“layer2.0.卷积2.偏向”、“layerer2.0.Error sample.0.偏向”、“layerer2.1.卷积1.偏向”,“layer2.1.conv.2.偏向”、“layer3.0.1.偏向”、“layer3.0.2.偏向”、“layer3.0.sample.0.偏向”、“layer3.1.conv.1.偏向”、“layer3.1.conv.2.偏向”、“layer4.0..1偏”、“layer4.0.2.偏向”、“layerer4.0.sample.0.偏向”、“layerer4.1.con1.偏向”、“layerer4.1.con2.偏倚”。
发布于 2022-06-22 21:25:02
您应该更改片段中给出的_resnet函数
def _resnet(arch, block, layers, pretrained, progress, **kwargs):
model = ResNet(block, layers, **kwargs)
if pretrained:
state_dict = load_state_dict_from_url(model_urls[arch],
progress=progress,
strict=False)
model.load_state_dict(state_dict)
return model
通过添加strict=False,应该忽略不匹配的键,避免崩溃。
发布于 2022-06-23 04:16:55
默认的_resnet函数应该更改如下:
def _resnet(arch, block, layers, pretrained, progress, **kwargs):
model = ResNet(block, layers, **kwargs)
if pretrained:
state_dict = load_state_dict_from_url(model_urls[arch],
progress=progress)
model.load_state_dict(state_dict, strict=False)
return model
这将允许我们从state_dict加载预先训练过的权重,而忽略不匹配的键。
https://stackoverflow.com/questions/72722049
复制相似问题