Тонкая настройка предварительно обученной модели 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)
Другие вопросы по тегам