我最近正在研究深度学习,主要依靠Andrew Ng在Coursera上进行的深度学习专业化。
我想建立自己的模型来对MNIST
进行分类,准确率达到99%(简单的MLP模型,而不是CNN模型)。因此,我使用KerasClassifier
来包装我的模型,并使用GridsearchCV
来微调超参数(包括隐藏层数,单位数,辍学率等)
但是,当我在Google上进行“微调”时,大多数结果主要是在“转移学习”上,它们只是在调整学习率,输出层号或冻结层号。
我知道这些著名的模型只需稍作更改就能解决许多问题。但是,如果我想从头开始构建一个微型模型来处理一个特殊的问题,什么是常见/最佳实践?
所以我的问题主要是关于微调模型的常见/最佳实践:
RandomizedSearchCV
/ GridSearchCV
或hyperas
来调整)GridSearchCV
的默认设置,它极大地增加了培训时间,但几乎无济于事)谢谢!
答案 0 :(得分:1)
在深度学习中,微调通常是指对来自新域的数据重新训练预训练模型的某些层。我相信您正在寻找诸如“超参数优化”之类的东西。有多种方法可以解决此问题。人们对最佳方法有自己的偏好。可以使用RandomizedSearchCV / GridSearch CV或两者结合使用。使用一些配置反复试验就可以了。人们有时会完全重新训练众所周知的体系结构。其他人则诉诸更复杂的方法,例如使用进化编程(遗传算法)优化超参数。因此,您有点喜欢选择。
通常仅在数据集较小的情况下才需要进行交叉验证,并且进一步拆分为训练集和测试集会减小测试集的大小,从而降低结果的统计显着性(可靠性)。如果您有足够的数据,则可以继续进行,然后分为训练/验证/测试集。但这通常是必需的,因为大量标记数据很少见。
如果可以使用现成的模型来解决您要解决的问题,请使用它们!虽然熟悉实现和源代码会很有见识,但是无需重新发明轮子并重写这些解决方案!