首页 > 解决方案 > 关于 Keras/Tensorflow 中超参数调优的问题

问题描述

最近在研究深度学习,主要是靠Andrew Ng在Coursera上的Deep Learning Specialization。

我想建立自己的模型,MNIST以 99% 的准确率进行分类(简单的 MLP 模型,而不是 CNN)。所以我KerasClassifier用来包装我的模型并GridsearchCV用来微调超参数(包括隐藏层数、单元数、辍学率等)

然而,当我谷歌“微调”时,大部分结果主要是关于“迁移学习”,它只是调整学习率、输出层数或冻结层数。

我知道这些著名的模型只需稍加改动就能解决许多问题。但是,如果我想从头开始构建一个小型模型来处理一个特殊问题,那么常见/最佳实践是什么?

所以我的问题主要是关于微调模型的常见/最佳实践:

  1. 微调的常用/最佳方法是什么?(我见过人们手动调整超参数,或使用 scikit-learn 的RandomizedSearchCV/GridSearchCVhyperas
  2. 我应该使用 k 折交叉验证吗?(因为它是默认的集合GridSearchCV,它极大地增加了训练时间但帮助不大)
  3. 对现成的模型稍加修改就足以解决大多数问题吗?如果不是,我应该往哪个方向前进?

谢谢!

标签: pythontensorflowmachine-learningkerasdeep-learning

解决方案


  1. 在深度学习中,微调通常是指根据来自新领域的数据重新训练预训练模型的某些层。我相信您正在寻找诸如“超参数优化”之类的东西。有多种方法可以解决这个问题。人们对最佳方法有自己的偏好。使用 RandomizedSearchCV/GridSearch CV 或两者的组合都可以。使用一些配置进行试验和错误是可以的。人们有时会完全重新训练众所周知的架构。其他人采用更复杂的方法,例如使用进化编程(遗传算法)优化超参数。所以你有点被宠坏了。

  2. 通常只有在您的数据集较小时才需要交叉验证,并且进一步拆分为训练集和测试集会减小测试集的大小,从而降低结果的统计显着性(可靠性)。如果你有足够的数据,你可以继续,只是分成训练/验证/测试集。但它通常是必要的,因为大量标记数据往往很少见。

  3. 如果现成的模型可用于您要解决的问题,请使用它们!虽然熟悉实现和源代码很有见地,但无需重新发明轮子并重写这些解决方案!


推荐阅读