Тонкая настройка предварительно обученной модели MobileNet_V2 в Pytorch
Я новичок в pyTorch, и я пытаюсь создать классификатор, где у меня есть около 10 видов набора данных папки изображений, для этой задачи я использую модель Pretrained ( MobileNet_v2), но проблема в том, что я не могу изменить его слой FC, Атрибут model.fc отсутствует. Может ли кто-нибудь помочь мне сделать это. Спасибо
4 ответа
Сделайте что-то вроде ниже:
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
,
Исходя из исходного кода MobileNet V2, похоже, что в конце эта модель имеет последовательную модель, называемую классификатором. Следовательно, вы должны иметь возможность изменить последний слой классификатора следующим образом:
import torch.nn as nn
import torchvision.models as models
model = models.mobilnet_v2()
model.classifier[1] = nn.Linear(model.last_channel, 10)
К сожалению, я не могу проверить этот код прямо сейчас.
Это также хорошая справка о том, как настроить модели.
Внедрение MobilenetV2 требует num_classes
(по умолчанию =1000) в качестве входных данных и обеспечивает self.classifier
в качестве атрибута, который является слоем torch.nn.Linear с выходным размером num_classes
, Вы можете использовать этот атрибут для тонкой настройки. Вы можете взглянуть на код самостоятельно для лучшего понимания.
import torch.nn as nn
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)