【问题标题】:Confusing results of transfer learning accuracy迁移学习准确性的令人困惑的结果
【发布时间】:2020-06-14 00:29:23
【问题描述】:

我刚刚根据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 层时会得到更差的分类结果。不应该修改吗?

【问题讨论】:

    标签: python machine-learning classification pytorch transfer-learning


    【解决方案1】:

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

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

    finetunnig 也将更长,因此如果在收敛后但在固定数量的 epoch 之后没有停止它,如果您在 20 个类中训练更长时间,您可以获得更好的结果。

    【讨论】:

    • 对不起。也许我没有说得很清楚。我正在使用预训练的 resnet50 对 20 个类进行分类(默认情况下,网络输出 1000 个类的可能性),我得到了 93.75% 的准确率。当我更改 fc 层并使其只输出 20 个类的可能性时,我只得到了 60%准确性。我完全糊涂了。
    • 你在这两种情况下都在微调 fc 层吗?或者你是否也在为 fc 层使用预训练的权重?
    猜你喜欢
    • 2016-08-24
    • 2016-07-23
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2019-01-30
    • 2011-02-01
    • 2018-07-30
    • 1970-01-01
    相关资源
    最近更新 更多