指南:深度学习实用技巧和窍门传输!
点击上方关注,All in AI中国
以下是我与同龄人和学生讨论如何优化深度模型的对话、信息和辩论的精华集合。如果你有技巧,也可以分享在评论区!
首先,为何选择Tweak模型?
像卷积神经网络(CNN)这样的深度学习模型具有大量参数,我们实际上可以调用这些超参数,因为它们在模型中并不是天生的优化。您可以网格搜索这些超参数的最佳值,但是您需要大量的硬件和时间。那么,真正的数据科学家是否愿意猜测这些基本参数呢?
改进模型的最佳方法之一是建立在您所在领域深入研究的专家的设计和架构上,这些专家通常使用强大的硬件。他们经常慷慨地开源所得的建模架构和基本原理。
深度学习技巧
以下几种方法可以通过预先训练的模型来提高您的时间和准确度:
- 研究理想的预训练架构:了解迁移学习的好处,或浏览一些强大的CNN架构。考虑可能看起来不太明显的域名,但分享其潜在的功能。
- 使用较小的学习率:由于预先训练的权重通常优于随机初始化的权重,因此修改得更精细!您在这里的选择取决于学习环境以及预训练的进展情况,但需要检查各个时期的错误,以了解完成的情况如何。
- 使用Dropout:与Ridge和LASSO回归模型正则化一样,所有模型都没有优化的alpha或dropout。这是一个超级参数,取决于您的具体问题,必须进行测试。从更大的变化开始,用更广泛的网格搜索范围跨越数量级,如np.logspace()可以提供的那样。然后就会像上面的学习速率一样下降。
- 限制权重大小:我们可以限制某些层的权重的最大范数(绝对值),以概括我们的模型
- 不要改动第一层:神经网络的第一个隐藏层倾向于捕获通用和可解释的特征,如形状、曲线或跨域经常相关的交互。我们应该经常留下这些,并专注于进一步优化元潜在级别。这可能意味着添加隐藏层,所以我们不急于这个过程!
- 修改输出图层:使用适合您的域的新激活函数和输出大小替换模型默认值。但是,不要将自己局限于最明显的解决方案。虽然MNIST看起来似乎需要10个输出类,但是有些数字具有常见的变化,并且允许12-16个类可以更好地解决这些变量并提高模型性能!与上面的提示一样,深度学习模型应该随着我们接近输出而不断修改和定制。
Keras的技术
以下是使用MNIST修改Keras中的丢失和限制权重大小的方法:
dropout最佳实践:
- 使用20-50%的dropout,建议输入20%。 太低,影响可以忽略不计; 太高,反而不适合。
- 在输入图层和隐藏图层上使用dropout。 事实证明,这可以提高深度学习的性能。
- 使用具有衰减和大动量的大学习速率。
- 限制你的权重!大的学习率可能导致梯度爆炸。 对网络权重施加约束,例如大小为5的最大范数正则化,已被证明可以改善结果。
- 使用更大的网络。当在较大的网络上使用dropout时,您可能会获得更好的性能,从而为模型提供更多学习独立表示的机会。
以下是Keras最终层修改的示例,其中包含14个MNIST类:
以及如何在前五层中冻结权重的示例:
或者,我们可以将该层的学习率设置为零,或者使用像Adadelta或Adam这样的参数自适应学习算法。 这有点复杂,并且在Caffe等其他平台上实现得更好。
预训练网络库
Keras
Kaggle 列表:https://www.kaggle.com/gaborfodor/keras-pretrained-models
Keras 应用:https://keras.io/applications/
OpenCV 示例:https://www.learnopencv.com/keras-tutorial-fine-tuning-using-pre-trained-models/
TensorFlow
VGG16:https://www.learnopencv.com/keras-tutorial-fine-tuning-using-pre-trained-models/
Inceptiom V3:https://github.com/tensorflow/models/blob/master/inception/README.md#how-to-fine-tune-a-pre-trained-model-on-a-new-task
ResNet:https://github.com/tensorflow/models/blob/master/inception/README.md#how-to-fine-tune-a-pre-trained-model-on-a-new-task
Torch
LoadCaffe:https://github.com/szagoruyko/loadcaffe
Caffe
Model Zoo:https://github.com/BVLC/caffe/wiki/Model-Zoo
在Jupyter中查看您的TensorBoard图
了解模型的外观通常很重要。如果您在Keras工作,抽象很好但不允许您深入到模型的各个部分以进行更深入的分析。幸运的是,下面的代码让我们直接用Python可视化我们的模型:
使用Keras可视化您的模型
这将绘制模型的图形并将其另存为png文件:
plot有两个可选参数:
- show_shapes(默认为False)控制输出形状是否显示在图形中。
- show_layer_names(默认为True)控制是否在图表中显示图层名称。
您也可以直接获取pydot.Graph对象并自行渲染,例如在ipython笔记本中显示它: