为了账号安全,请及时绑定邮箱和手机立即绑定

提高多类图像分类器的准确性

提高多类图像分类器的准确性

江户川乱折腾 2022-12-06 15:34:56
我正在使用 Food-101 数据集构建分类器。该数据集具有预定义的训练集和测试集,均已标记。它共有 101,000 张图像。我正在尝试为 top-1 构建一个 >=90% 准确度的分类器模型。我目前坐在 75%。提供的训练集不干净。但是现在,我想知道我可以改进我的模型的一些方法以及我做错了什么。我已将训练图像和测试图像划分到各自的文件夹中。在这里,我使用 0.2 的训练数据集通过运行 5 个时期来验证学习者。np.random.seed(42)data = ImageList.from_folder(path).split_by_rand_pct(valid_pct=0.2).label_from_re(pat=file_parse).transform(size=224).databunch()top_1 = partial(top_k_accuracy, k=1)learn = cnn_learner(data, models.resnet50, metrics=[accuracy, top_1], callback_fns=ShowGraph)learn.fit_one_cycle(5)epoch   train_loss  valid_loss  accuracy    top_k_accuracy  time0       2.153797    1.710803    0.563498    0.563498    19:261       1.677590    1.388702    0.637096    0.637096    18:292       1.385577    1.227448    0.678746    0.678746    18:363       1.154080    1.141590    0.700924    0.700924    18:344       1.003366    1.124750    0.707063    0.707063    18:25在这里,我试图找到学习率。在讲座中的表现非常标准:learn.lr_find()learn.recorder.plot(suggestion=True)LR Finder is complete, type {learner_name}.recorder.plot() to see the graph.Min numerical gradient: 1.32E-06Min loss divided by 10: 6.31E-08使用 1e-06 的学习率再运行 5 个 epoch。将其保存为 stage-2learn.fit_one_cycle(5, max_lr=slice(1.e-06))learn.save('stage-2')epoch   train_loss  valid_loss  accuracy    top_k_accuracy  time0       0.940980    1.124032    0.705809    0.705809    18:181       0.989123    1.122873    0.706337    0.706337    18:242       0.963596    1.121615    0.706733    0.706733    18:383       0.975916    1.121084    0.707195    0.707195    18:274       0.978523    1.123260    0.706403    0.706403    17:04之前我总共运行了 3 个阶段,但模型没有改进超过 0.706403,所以我不想重复。下面是我的混淆矩阵。我为糟糕的决议道歉。这是 Colab 的功劳。因为我已经创建了一个额外的验证集,所以我决定使用测试集来验证已保存的 stage-2 模型,看看它的表现如何:path = '/content/food-101/images'data_test = ImageList.from_folder(path).split_by_folder(train='train', valid='test').label_from_re(file_parse).transform(size=224).databunch()learn.load('stage-2')learn.validate(data_test.valid_dl)这是结果:[0.87199837, tensor(0.7584), tensor(0.7584)]
查看完整描述

1 回答

?
守着一只汪

TA贡献1872条经验 获得超3个赞

  • 尝试从 torchvision 变换中进行增强,例如 RandomHorizontalFlip、RandomResizedCrop、RandomRotate、Normalize 等。这些总是对分类问题有很大帮助。

  • 标签平滑和/或混合精度训练。

  • 只需尝试使用更优化的架构,例如 EfficientNet。

  • 代替 OneCycle,更长时间、更手动的训练方法可能会有所帮助。尝试权重衰减为 5e-4 且 Nesterov 动量为 0.9 的随机梯度下降。使用大约 1-3 个 epoch 的热身训练,然后进行大约 200 个 epoch 的常规训练。您可以设置手动学习率计划或余弦退火或其他一些方案。整个方法将比通常的单周期训练消耗更多的时间和精力,只有在其他方法没有显示出可观的收益时才应探索。


查看完整回答
反对 回复 2022-12-06
  • 1 回答
  • 0 关注
  • 71 浏览
慕课专栏
更多

添加回答

举报

0/150
提交
取消
意见反馈 帮助中心 APP下载
官方微信