gpt4 book ai didi

python - Pytorch 预训练模型中的类数

转载 作者:行者123 更新时间:2023-12-05 02:39:41 24 4
gpt4 key购买 nike

我想使用Pytorch中的预训练模型对自己的数据集进行图像分类,但是如何在卡住特征提取层的参数的同时改变类的数量?

这些是我想要包括的模型:

resnet18 = models.resnet18(pretrained=True)
densenet161 = models.densenet161(pretrained=True)
inception_v3 = models.inception_v3(pretrained=True)
shufflenet_v2_x1_0 = models.shufflenet_v2_x1_0(pretrained=True)
mobilenet_v3_large = models.mobilenet_v3_large(pretrained=True)
mobilenet_v3_small = models.mobilenet_v3_small(pretrained=True)
mnasnet1_0 = models.mnasnet1_0(pretrained=True)
resnext50_32x4d = models.resnext50_32x4d(pretrained=True)
vgg16 = models.vgg16(pretrained=True)

提前致谢!


我添加的新代码:

import torch
from torchvision import models

class MyResModel(torch.nn.Module):
def __init__(self):
super(MyResModel, self).__init__()
self.classifier = nn.Sequential(
nn.Linear(512,256),
nn.ReLU(),
nn.Dropout(p=0.5),
nn.Linear(256,3),
)

def forward(self, x):
return self.classifier(x)

resnet18 = models.resnet18(pretrained=True)
resnet18.fc = MyResModel()

for param in resnet18.parameters():
param.requires_grad_(False)

最佳答案

您必须更改相应模型的最终线性层。

例如在 resnet 的情况下,当我们打印模型时,我们看到最后一层是全连接层,如下所示:

(fc):线性(in_features=512,out_features=1000,bias=True)

因此,您必须将 model.fc 重新初始化为具有 512 个输入特征和 2 个输出特征的线性层:

model.fc = nn.Linear(512, num_classes)

其他型号可以查看here

要卡住网络参数,您必须使用以下代码:

for name, param in model.named_parameters():
if 'fc' not in name:
print(name, param.requires_grad)
param.requires_grad=False

验证:

for name, param in model.named_parameters():  
print(name,param.requires_grad)

请注意,对于此示例,“fc”是分类层的名称。其他模型并非如此。您必须检查模型才能找到分类层的名称。

关于python - Pytorch 预训练模型中的类数,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/68980724/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com