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
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
.
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.
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)
num_classes
parameter prevents from downloading the pre-trained model which is pretty much what this question is about. Also, here is an updated link to the code. –
Rebbecarebbecca 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)
© 2022 - 2024 — McMap. All rights reserved.
torchvision.models
has no attributemobilnet_v2
. Present models are[resnet, alexnet, vgg, squeezenet, densenet, inception]
– Chokeberry