我是pyTorch的新手,正在尝试创建一个分类器,其中我有大约10种图像文件夹数据集。为此任务,我使用了预训练模型(MobileNet_v2),但问题是我不能更改它的FC层。它没有model.fc属性。请问是否有人能帮助我做到这一点。谢谢。
我是pyTorch的新手,正在尝试创建一个分类器,其中我有大约10种图像文件夹数据集。为此任务,我使用了预训练模型(MobileNet_v2),但问题是我不能更改它的FC层。它没有model.fc属性。请问是否有人能帮助我做到这一点。谢谢。
做类似以下的操作:
import torch
model = torch.hub.load('pytorch/vision', 'mobilenet_v2', pretrained=True)
print(model.classifier)
model.classifier[1] = torch.nn.Linear(in_features=model.classifier[1].in_features, out_features=10)
print(model.classifier)
输出:
Sequential(
(0): Dropout(p=0.2)
(1): Linear(in_features=1280, out_features=1000, bias=True)
)
Sequential(
(0): Dropout(p=0.2)
(1): Linear(in_features=1280, out_features=10, bias=True)
)
注意:你需要使用torch.hub
,需安装torch >= 1.1.0
版本。
import torch.nn as nn
import torchvision.models as models
model = models.mobilenet_v2()
model.classifier[1] = nn.Linear(model.last_channel, 10)
很遗憾,我现在无法测试这段代码。
这里也是一个很好的参考,关于如何微调模型。
MobilenetV2的实现需要输入num_classes
(默认为1000),并提供一个名为self.classifier
的属性,它是一个输出维度为num_classes
的torch.nn.Linear层。你可以使用这个属性进行微调。你可以查看代码以获得更好的理解。
import torchvision.models as models
model = models.mobilnet_v2(num_classes=10)
通过查看models.mobilenet_v2
中的最后一层,您可以看到以下内容:
(classifier): Sequential(
(0): Dropout(p=0.2, inplace=False)
(1): Linear(in_features=1280, out_features=1000, bias=True)
要将 out_features
从 1000
修改为任意类别数 num_classes
:
from torchvision import models
import torch.nn as nn
model_ft = models.mobilenet_v2(pretrained=True)
num_ftrs = model_ft.classifier[1].in_features
model_ft.classifier[1] = nn.Linear(num_ftrs, num_classes)
torchvision.models
没有属性mobilnet_v2
。现有的模型包括[resnet, alexnet, vgg, squeezenet, densenet, inception]
。 - Anubhav Singh