我刚刚根据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 个类之间找到匹配类可能比在两个类之间更难。
例如,如果你给它一个狗图像,它需要在猫、狗和马之间进行分类,它可能会发送 60% 的猫,30% 的狗和 10% 的马,然后如果它只需要在狗和马之间进行分类,那就错了它会给可能是 75% 的狗,25% 的马,然后是莱特。
Finetunnig 也将更长,因此如果您在收敛后但在固定数量的 epoch 之后没有停止它,那么如果您用 20 个类进行更长时间的训练,您可以获得更好的结果。
本文收集自互联网,转载请注明来源。
如有侵权,请联系 [email protected] 删除。
我来说两句