有没有办法预先确定一个 CNN 模型是否会比另一个模型表现更好?

人工智能 机器学习 训练 深度神经网络
2021-10-31 13:09:17

我开发了一个用于图像分析的 CNN。我有大约 100K 标记的图像。我得到了大约 85% 的准确度和大约 82% 的验证准确度,所以看起来模型的泛化比拟合更好。所以,我正在使用不同的超参数:过滤器的数量、层数、密集层中的神经元数量等。

对于每次测试,我都使用了所有的训练数据,而且非常缓慢且耗时。

有没有办法提前了解一个模型是否会比另一个模型表现更好?

4个回答

您的问题的简单答案是“不”,但需要注意。

需要注意的是,有迹象表明您的网络永远不会表现良好。例如,在前几个 epoch 中,epoch 准确度没有提高甚至持续下降,或者验证准确度持平或下降。可能是验证损失从一开始就很高,并且从一开始就一直在增加。这些都是不好的迹象。

然而,除此之外,很难知道该模型从长远来看不会很好地工作。例如,我们有一个为解决一组验证码而构建的模型。其中的回归部分收敛得非常快,但解决 CAPTCHA 其余部分的部分需要大约 18 小时才能收敛。老实说,我们只运行了这么长时间,因为这是一天结束的时候,回归部分看起来很有希望;CAPTCHA 求解器的训练行为中没有任何东西看起来会起作用(即使我们的直觉是它应该起作用。)

最后,我们有一个 96%+ 准确率的 CAPTCHA 求解器,如果我们观察它训练超过 10 或 15 分钟,我们可能会杀死它。

我希望您尝试对模型进行以下更改。

  • 在模型中引入批量归一化层。
  • 尝试批量大小为 32 - 64
  • 使用不同的架构,如 VGG、Resnet 等。

这个问题没有完整的证据答案,但你可以通过尝试一些已知的策略来获得最好的结果。

您的描述听起来类似于Imagenet dataset根据这个网站,最先进的 top-1 准确率高达 86%,比你的高不了多少。有很多方法可以提高准确性。我建议您阅读SOTA中列出的论文或 github,以找到最适合您情况的想法。

我无法发表评论,但这里有一些建议:

  • 玩 lr 和 lr finder
  • 使用预训练模型
  • 使用架构搜索或使用诸如efficientnet b6之类的东西
  • 在 relu 上使用 swish
  • 尝试不同的优化器
  • 尝试贝叶斯优化