I am new to pyTorch and I am trying to Create a Classifier where I have around 10 kinds of Images Folder Dataset, for this task I am using Pretrained model( MobileNet_v2 ) but the problem is I am not able to change the FC layer of it. There is not model.fc attribute. Can anyone help me to do this. Thanks
4 Answers
From the MobileNet V2 source code it looks like this model has a sequential model called classifier in the end. Therefore, you should be able to change the final layer of the classifier like this:
import torch.nn as nn
import torchvision.models as models
model = models.mobilenet_v2()
model.classifier[1] = nn.Linear(model.last_channel, 10)
Unfortunately, I cannot test this code right now.
This is also a good reference, on how to finetune models.
-
Actually, module `torchvision.models` has no attribute `mobilnet_v2`. Present models are `[resnet, alexnet, vgg, squeezenet, densenet, inception]` – Anubhav Singh Jul 31 '19 at 12:21
-
3@AnubhavSingh, actually it does since a recent torchvision update. https://pytorch.org/docs/stable/torchvision/models.html – Deb Jul 31 '19 at 14:40
-
Oh I see. My bad. Thank you so much . – Anubhav Singh Jul 31 '19 at 14:46
Do something like below:
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)
output:
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)
)
Note: you would need torch >= 1.1.0
to use torch.hub
.

- 8,321
- 4
- 25
- 43
MobilenetV2 implementation asks for num_classes
(default=1000) as input and provides self.classifier
as an attribute which is a torch.nn.Linear layer with output dimension of num_classes
. You can use this attribute for your fine-tuning. You can have a look at the code yourself for better understanding.
import torchvision.models as models
model = models.mobilnet_v2(num_classes=10)

- 417
- 6
- 21

- 1,133
- 8
- 15
-
1It's good to know there are these extra parameters! But it should be pointed out that using the `num_classes` parameter prevents from downloading the *pre-trained* model which is pretty much what this question is about. Also, [here](https://pytorch.org/docs/stable/_modules/torchvision/models/mobilenet.html#mobilenet_v2) is an updated link to the code. – DalyaG Sep 14 '20 at 12:53
By looking into the last layer in models.mobilenet_v2
, you can see the following:
(classifier): Sequential(
(0): Dropout(p=0.2, inplace=False)
(1): Linear(in_features=1280, out_features=1000, bias=True)
To edit the out_features
from 1000
to any number of classes 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)

- 11
- 3