Непонятные результаты точности перевода обучения - PullRequest
0 голосов
/ 01 марта 2020

Я только что начал проект классификации изображений в соответствии с руководством из документации на веб-сайте pytorch ( this ). В руководстве есть часть кода, подобная этой:

model_ft = models.resnet50(pretrained=True)
num_ftrs = model_ft.fc.in_features
model_ft.fc = nn.Linear(num_ftrs, 20)

И я знаю причину, по которой слой f c должен быть изменен. Так как мой проект должен классифицировать 20 классов, я просто изменил параметры с 2 на 20. Но я просто получаю точность около 60%. Когда я не меняю слой f c следующим образом:

model_ft = se_resnet50(pretrained = True)

Оказалось, что точность достигает 93,75%, что намного лучше по сравнению с прежними результатами.

Я просто не мог выяснить, почему у меня получаются худшие результаты классификации, когда я изменяю слой f c. Разве это не должно быть изменено?

1 Ответ

0 голосов
/ 02 марта 2020

Вероятно, сети труднее найти соответствующий класс между 20 классами, чем между двумя классами.

Например, если вы даете ему изображение собаки, и оно должно классифицировать его между кошкой, собакой и лошадью, это может привести к 60% кошке, 30% собаке и 10% лошади, а затем ошибаться, если это необходимо классифицировать. только между собакой и лошадью это может дать 75% собаке, 25% лошадям и затем быть правым.

Finetunnig также будет длиннее, так что вы могли бы получить лучший результат, если вы тренируете его дольше с 20 классами, если вы не остановили его после конвергенции, но после определенного количества эпох.

...