Недавно я работал над проектом классификации изображений посадочных мест. И я только что прочитал учебник по переводному обучению из официальной документации с сайта pytorch ( здесь ). Все изображения следов выглядят следующим образом: изображение следа
В наборе данных содержатся изображения следов 20 человек, а на каждого человека - 10 изображений следа. Я попробовал сценарии из учебник, упомянутый ранее. И я только изменил часть для преобразования данных в это:
data_transforms = {
‘train’: transforms.Compose([
#transforms.RandomResizedCrop(224),
transforms.Resize(256),
transforms.CenterCrop(224),
transforms.RandomHorizontalFlip(),
#transforms.RandomVerticalFlip(),
transforms.RandomRotation(degrees=15),
transforms.RandomRotation(degrees=30),
transforms.ToTensor(),
transforms.Normalize([0.485, 0.456, 0.406], [0.229, 0.224, 0.225])
]),
‘val’: transforms.Compose([
transforms.Resize(256),
transforms.CenterCrop(224),
transforms.ToTensor(),
transforms.Normalize([0.485, 0.456, 0.406], [0.229, 0.224, 0.225])
]),
}
Итак, вот результат, который озадачивает меня довольно долгое время. Когда я использую это из официального урока:
model_ft = models.resnet50(pretrained=True)
num_ftrs = model_ft.fc.in_features
model_ft.fc = nn.Linear(num_ftrs, 20)
, я могу получить только a cc около 60%. Но когда я не изменил слой f c следующим образом:
model_ft = se_resnet50(pretrained = True)
Я мог бы даже получить результат cc, достигший даже 97,5%. Вот мои вопросы: 1. Когда я изменил слой f c, это означает, что он мог выдавать только 20 вероятностей (поскольку у меня есть набор данных из 20 человек). Но почему я получил худшие результаты, если я изменил f c layer ???
2.Я рассматривал возможность использования S Enet (se-resnet50 здесь ) для улучшения моего результата (с 97,5%). Но я только что получил a cc около 80%, что хуже, чем у resnet50. Как может быть хуже?
3.Если я хочу улучшить свои результаты (с 97,5%), что я должен делать ??
Заранее спасибо. Буду признателен за любую помощь.