迁移学习准确性的混淆结果

Confusing results of transfer learning accuracy

我刚刚根据pytorch网站上的文档教程(this)开始了一个图像分类项目。在教程中,有一段代码是这样的:

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

而且我已经知道为什么要更改fc层的原因了。由于我的项目需要分类20 类,所以我只是将参数从2更改为20。但是,我只是得到准确率在60%左右。当我不这样更改 fc 层时:

model_ft = se_resnet50(pretrained = True)

结果准确率达到了93.75%,比之前的结果好很多

我只是想不通为什么我在修改 fc 层时得到更差的分类结果。不应该修改吗?

网络在 20 个 class 之间找到匹配 class 可能比在两个 class 之间找到匹配更困难。

例如,如果你给它一张狗的图像,它需要class在猫、狗和马之间进行验证,它可能会发送 60% 的猫、30% 的狗和 10% 的马,然后就出错了 而如果它需要 class 只在狗和马之间验证它,它可能会给出 75% 的狗,25% 的马然后是赖特。

finetunnig 也会更长,所以如果你用 20 classes 训练更长的时间,如果你在收敛后没有停止它,而是在固定数量的 epochs 之后,你可以获得更好的结果。