【发布时间】:2019-12-08 15:30:50
【问题描述】:
我是 pyTorch 的新手,我正在尝试创建一个分类器,其中我有大约 10 种图像文件夹数据集,对于这个任务,我使用的是预训练模型 (MobileNet_v2),但问题是我无法更改 FC它的一层。没有 model.fc 属性。 谁能帮我做到这一点。 谢谢
【问题讨论】:
标签: deep-learning classification pytorch pre-trained-model mobilenet
我是 pyTorch 的新手,我正在尝试创建一个分类器,其中我有大约 10 种图像文件夹数据集,对于这个任务,我使用的是预训练模型 (MobileNet_v2),但问题是我无法更改 FC它的一层。没有 model.fc 属性。 谁能帮我做到这一点。 谢谢
【问题讨论】:
标签: deep-learning classification pytorch pre-trained-model mobilenet
从MobileNet V2 source code 看来,这个模型最后有一个称为分类器的顺序模型。因此,您应该能够像这样更改分类器的最后一层:
import torch.nn as nn
import torchvision.models as models
model = models.mobilenet_v2()
model.classifier[1] = nn.Linear(model.last_channel, 10)
很遗憾,我现在无法测试此代码。
This 也是一个很好的参考,关于如何微调模型。
【讨论】:
torchvision.models没有mobilnet_v2的属性。目前型号为[resnet, alexnet, vgg, squeezenet, densenet, inception]
执行以下操作:
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。
【讨论】:
MobilenetV2 实现要求num_classes(默认=1000)作为输入,并提供self.classifier 作为一个属性,它是一个torch.nn.Linear 层,输出维度为num_classes。您可以使用此属性进行微调。您可以自己查看code 以获得更好的理解。
import torchvision.models as models
model = models.mobilnet_v2(num_classes=10)
【讨论】:
num_classes 参数会阻止下载 pre-trained 模型,这几乎就是这个问题的意义所在。此外,here 是代码的更新链接。