基于Pre-trained模型加速模型学习的6点建议
来自:深度学习与NLP
首先,为什么要调整模型?
像卷积神经网络( CNN )这样的深度学习模型具有大量的参数;一般称之为超参数,因为它们不是固定值,需要迭代优化。通常可以通过网格搜索的方法来查找这些超参数的最佳值,但需要大量硬件和时间开销。那么,一个真正的数据科学家是否满足于只是猜测这些超参数呢?答案当然是否定的。
改进模型的最佳方法之一是,基于专业团队的设计和体系结构上来进行改进,但这些专业的知识往往需要对某一领域具有深入的了解,且通常需要有强大的硬件支持。一般这些专业的团队都喜欢把他们的训练好的模型(pre-trained model)开源出来,无偿提供给别人使用。基于这些pre-trained model来做研究和应用,可以省去大量的时间和资源。
深度学习技巧
这里分享几种方法,如何基于预训练好的模型来降低深度学习模型训练时间,提升模型的准确性:
1、选择最适用于做pre-trained模型的网络结构:了解迁移学习(transfer learning)的优点,或者一些强大的CNN网络结构。主要考虑,有些领域之间看起来不明显,但领域之间却共享一些具有潜在特性(share potential latent features)。
2、使用较小的学习率:由于预先训练的权重(weights)通常比随机初始化的权重更好,因此调整需要更精细!如何选择主要取决于training landscape和学习的进展情况,但需要仔细检查每个epoch的training errors,分析如何能让模型达到收敛。
3、使用Dropout:就像Ridge和LASSO正则化技术对于回归模型一样,对于所有模型都存在需要优化的参数alpha或Dropout。这是一个超参数,取决于需要解决的具体问题,只能通过不停实验的方法得到。先对超参数做比较大的调整(gridsearch时选择一个比较大的变化范围),比如NP. logspace(),然后像上面的一样减小学习速率。循环上述过程直到找到最优值。
4、限制权重大小:可以限制某些层的权重的最大范数(绝对值),可以提升模型泛化的能力。
5、不要改变第一层网络的权值:神经网络的第一个隐含层倾向于捕捉通用和可解释(universal and interpretable)的特征,如形状、曲线或交叉(shapes、curves and interactions),这些特征通常与跨域(domains)相关。应该经常把这些特征放到一边,把重点放在进一步优化meta latent level在水平上。这可能意味需要添加隐藏层!
6、修改输出层:把模型参数替换成适用于要解决新领域的新的激活函数和输出大小。但是,不要把自己局限于最明显的解决方案中。比如,尽管MNIST只需要10个输出类,但这些数字有共同的变化,允许有12 - 16个类可能会更好地解决这些问题,并提高模型性能!
Keras中的技巧
如何在Keras MNIST中修改Dropout和限制权重的大小:
Dropout最佳实践
1、使用20–50 %的,比较小的Dropout,建议20 %的输入(Inputs)。值取得太小,不起作用;值取得太大,不好收敛。
2、在输入层和隐藏层上使用Dropout。这一方法已被证明可以提高深入学习的效果。
3、使用较大的(带衰减率)学习速率(learning rate with decay),以及较大的动量(momentum)。
4、限制模型的权重!大的学习速率容易导致梯度爆炸。通过对网络权值施加约束(如最大范数正则化(max-norm regularization),其大小为5 )可以改善结果。
5、使用更大的网络。在较大的网络上使用Dropout,可能会获得更好的性能,从而使模型有更多的机会学习独立表示(Independent representations)。
给一个例子,如何在Keras中修改MNIST模型最后一层,输出14个类别:
如何在网络的最初五层中固定网络的权值(Freeze weights):
此外,可以将该层的学习速率设置为零,或者使用参数的自适应学习算法,如Adadelta或Adam。这有点复杂,在Caffe等其他平台上可以更好地实现。
预训练模型库
Keras
Kaggle List https://www.kaggle.com/gaborfodor/keras-pretrained-models
Keras Application:https://keras.io/applications/
OpenCV Example:https://www.learnopencv.com/keras-tutorial-fine-tuning-using-pre-trained-models/
TensorFlow
VGG16:https://github.com/ry/tensorflow-vgg16
Inception V3:https://github.com/tensorflow/models/blob/master/inception
ResNet:https://github.com/ry/tensorflow-resnet
Torch
LoadCaie:https://github.com/szagoruyko/loadcaffe
Caffe
Model Zoo:https://github.com/BVLC/caffe/wiki/Model-Zoo
TensorBoard的Graph的可视化
了解模型的整体结构通常很重要。下面给出一个例子,如何直接使用Python可视化训练的模型:
http://nbviewer.jupyter.org/github/tensorflow/tensorflow/blob/master/tensorflow/examples/tutorials/deepdream/deepdream.ipynb
基于Pre-trained模型加速模型学习的6点建议相关推荐
- 目标检测——模型加速的学习笔记
1 PyTorch实现 1.1 推理部分 不要使用torch.utils.data import Dataset和torch.utils.data.DataLoader!!! 说明:时间消耗特别大,速 ...
- [Pytorch]基于混和精度的模型加速
这篇博客是在pytorch中基于apex使用混合精度加速的一个偏工程的描述,原理层面的解释并不是这篇博客的目的,不过在参考部分提供了非常有价值的资料,可以进一步研究. 一个关键原则:"仅仅在 ...
- 基于模型的强化学习比无模型的强化学习更好?错!
作者 | Carles Gelada and Jacob Buckman 编辑 | DeepRL 来源 | 深度强化学习实验室(ID:Deep-RL) [导读]许多研究人员认为,基于模型的强化学习(M ...
- 通知!明天下午欢迎大家和谷歌开发者团队相约学习 AI 模型加速方法与实践
活动信息 活动主题:机器学习实践:模型加速与数据安全 时间:2020年9月12日 14:00 - 16:25 B站上海GDG 直播: https://live.bilibili.com/2191730 ...
- 【基于 docker 的 Flask 的深度学习模型部署】
文章目录 1.前言 2.docker简介 3.基于Falsk的REST API实现 4.编写dockerfile 5.基于docker的模型部署 1.前言 模型部署一直是深度学习算法走向落地的重要的一 ...
- 图模型+Bert香不香?完全基于注意力机制的图表征学习模型Graph-Bert
作者 | Jiawei Zhang.Haopeng Zhang.Congying Xia.Li Sun 译者 | 凯隐 编辑 | Jane 出品 | AI科技大本营(ID:rgznai100) [导读 ...
- 基于Keras Application和Densenet迁移学习(transfer learning)的乳腺癌图像分类模型(良性、恶性)
基于Keras Application和Densenet迁移学习(transfer learning)的乳腺癌图像分类模型(良性.恶性) 概论: 美国癌症学会官方期刊发表<2018年全球癌症统计 ...
- 上交张伟楠副教授:基于模型的强化学习算法,基本原理以及前沿进展(附视频)
2020 北京智源大会 本文属于2020北京智源大会嘉宾演讲的整理报道系列.北京智源大会是北京智源人工智能研究院主办的年度国际性人工智能高端学术交流活动,以国际性.权威性.专业性和前瞻性的" ...
- 强化学习(十七) 基于模型的强化学习与Dyna算法框架
在前面我们讨论了基于价值的强化学习(Value Based RL)和基于策略的强化学习模型(Policy Based RL),本篇我们讨论最后一种强化学习流派,基于模型的强化学习(Model Base ...
- AI开发者大会之AI学习与进阶实践:2020年7月3日《如何转型搞AI?》、《基于AI行业价值的AI学习与进阶路径》、《自动机器学习与前沿AI开源项目》、《使用TensorFlow实现经典模型》
AI开发者大会之AI学习与进阶实践:2020年7月3日<如何转型搞AI?>+<无行业不智能:基于AI行业价值的AI学习与进阶路径>.<自动机器学习与前沿AI开源项目> ...
最新文章
- 使用tomcat自带的连接池,报错
- php集成jpush教程,Laravel 集成 JPush 极光推送指北
- [T-ARA][그녀를 보면][看着那个女人的话]
- 工作331:uni-修改未完成数据动态渲染
- hdu1962Corporative Network带权回路
- Kotlin学习笔记24 协程part4 协程的取消与超时
- flutter 获取android 还是ios_Flutter完整开发实战详解(二十、 Android PlatformView 和键盘问题)...
- js接收springmvc传过来的数据_Java修行第072天 ---SpringMVC(中)
- 【Python数据挖掘】回归模型与应用
- 7.Swoole的自定义协议功能的使用
- No module named ‘wrapt‘
- Framehawk技术-思杰HDX
- 利用C语言读取WAV文件
- 二维vector初始化,赋值
- 产品UI原型设计软件:Balsamiq Mockups 3 for Mac
- MT666数字程序测试
- 支付宝小程序: h5跳转 小程序
- 正向代理和反向代理的区别
- Redis集群-哨兵
- RTMP、RTSP、HTTP协议流常用直播流地址