6

我是 pyTorch 的新手,我正在尝试创建一个分类器,其中我有大约 10 种图像文件夹数据集,对于这个任务,我使用的是预训练模型( MobileNet_v2 ),但问题是我无法更改它的 FC 层. 没有 model.fc 属性。谁能帮我做到这一点。谢谢

4

3 回答 3

8

MobileNet V2 源代码看来,这个模型最后有一个称为分类器的顺序模型。因此,您应该能够像这样更改分类器的最后一层:

import torch.nn as nn
import torchvision.models as models
model = models.mobilenet_v2()
model.classifier[1] = nn.Linear(model.last_channel, 10)

不幸的是,我现在无法测试这段代码。
也是一个很好的参考,关于如何微调模型。

于 2019-07-31T08:25:18.270 回答
6

执行以下操作:

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 >= 1.1.0使用torch.hub.

于 2019-07-31T12:42:26.287 回答
2

MobilenetV2 实现要求num_classes(default=1000) 作为输入,并self.classifier作为一个属性提供,它是一个 torch.nn.Linear 层,输出维度为num_classes. 您可以使用此属性进行微调。您可以自己查看代码以更好地理解。

import torchvision.models as models
model = models.mobilnet_v2(num_classes=10)
于 2019-07-31T08:26:36.650 回答