深度学习技巧与窍门

摘要: 本文是根据自身构建深度学习模型总结而来,适合有一定深度学习基础的读者阅读。

       本文是根据自身构建深度学习模型总结而来,可能读起来比较干巴,但干货确实不少。闲话少叙,直接进入相关内容。

首先,为什么只是微调模型?

       类似于卷积神经网络(CNN)的深度学习模型一般而言都有大量的参数,我们训练构建的模型实际上就是为了得到比较好的网络参数值,整个调参过程需要花费大量的硬件和时间资源。因此,很多研究者在改进模型时采用的方法是在专家设计和构建的模型基础上进行深入研究,一般情况下,专家会开源构建的模型结构和原理,有些会给出相应训练好的模型参数,可供其它研究人员直接使用,比如迁移学习等。

深度学习技巧

       可以通过以下几种方法来改善训练模型的拟合时间和准确性:

  • 1.研究理想的预训练结构:了解迁移学习的好处,或浏览一些高效CNN模型结构。此外,可以考虑其它看起来不太明显的领域,共享潜在的相似特征。
  • 2.使用一个小的学习率:由于预先训练的权重通常比随机初始化的权重要好,所以修改参数时应该更细致些!参数的选择取决于学习环境和预训练的效果,但需要检查各个Epoch的错误以清楚收敛过程。
  • 3.使用dropout:与用于回归模型的Ridge和LASSO正则化一样,所有模型都没有优化的alpha或dropout。dropout是一个超参数,表明每次训练时丢弃的神经元概率,其设置取决于具体问题,并且必须经过实验测试。一般开始时设置得比较大,随后跨数量级的形式搜索其最优设置值。
  • 4.限制权重大小:可以限制某些层权重的最大范数(绝对值)以使得模型更加泛化。
  • 5.不要修改第一层:神经网络的第一个隐藏层倾向于捕捉通用和可解释的特征,例如形状、曲线等。因此,在应用迁移学习时,一般不会对经典模型的第一层进行修改,并且专注于优化其它层或添加隐藏层。
  • 6.修改输出层:将模型默认值替换为适合的新激活函数和输出大小。但是,不要将自己局限于最明显的解决方案,即只改变激活函数和最后输出层的节点数。虽然MNIST数据集可能看起来像是需要10个输出类别,但一些数字有共同的变化,相关结果表明输出层设置为输出12-16个类别可以更好地解决这些变体并提高模型性能!

Keras中的技巧

       以下是如何修改dropout和限制MNIST数据集的权重大小:

# dropout in input and hidden layers
# weight constraint imposed on hidden layers
# ensures the max norm of the weights does not exceed 5
model = Sequential()
model.add(Dropout(0.2, input_shape=(784,))) # dropout on the inputs
# this helps mimic noise or missing data
model.add(Dense(128, input_dim=784, kernel_initializer='normal', activation='relu', kernel_constraint=maxnorm(5)))
model.add(Dropout(0.5))
model.add(Dense(128, kernel_initializer='normal', activation='tanh', kernel_constraint=maxnorm(5)))
model.add(Dropout(0.5))
model.add(Dense(1, kernel_initializer='normal', activation='sigmoid'))

Dropout最佳实践:

  • 使用小的dropout概率,一般为20%~50%,对于输入建议使用20%。概率太低会导致收获甚微,太高导致训练不好;
  • 在输入层和隐藏层上都使用dropout,这已被证明可以提高深度学习模型的性能;
  • 使用衰减大的学习速率和大的动量;
  • 限制权重,大的学习速率可能导致梯度爆炸,相关论文表明,对网络权重施加约束可以改善结果。
  • 使用大型网络。在较大的网络中使用dropout可能会获得更好的性能,从而使模型更有机会学习独立表示。
           下面是Keras中修改最后一层的例子,将MNIST的10类修改为14类:
from keras.layers.core import Activation, Dense
model.layers.pop() # defaults to last
model.outputs = [model.layers[-1].output]
model.layers[-1].outbound_nodes = []
model.add(Dense(14, activation='softmax')) 

       以及如何冻结前五层权重的示例:

for layer in model.layers[:5]:layer.trainable = False

       或者,可以将该层的学习率设置为零,然后使用像Adadelta或Adam这样的参数自适应学习算法。

预训练网络库资源

Keras

  • Kaggle List
  • Kears Application
  • OpenCV Example

TensorFlow

  • VGG16
  • Inception V3
  • ResNet

Torch

  • LoadCaffe

Caffe

  • Model Zoo

在Jupyter中查看TensorBoard图

       了解模型的外观通常是很重要的。如果使用的是Keras工具,搭建出来的模型会很抽象,并且不允许深入分析模型的各个部分。幸运的是,下面的代码可以直接用Python直观地看到构建的模型(代码太长,见原文):

from IPython.display import clear_output, Image, display, HTML
def strip_consts(graph_def, max_const_size=32):"""Strip large constant values from graph_def."""strip_def = tf.GraphDef()for n0 in graph_def.node:n = strip_def.node.add() n.MergeFrom(n0)if n.op == 'Const':tensor = n.attr['value'].tensorsize = len(tensor.tensor_content)if size > max_const_size:tensor.tensor_content = bytes("<stripped %d bytes>"%size, 'utf-8')return strip_def ..

用Keras可视化模型

       以下代码将绘制模型的图形并将其保存为png文件:

from keras.utils.visualize_util import plot
plot(model, to_file='model.png')

       plot有两个参数可供选择:

  • show_shapes(默认为False)控制输出形状是否显示在图形中;
  • show_layer_names(默认为True)控制图层中是否显示图层名称;
           也可以直接获取pydot.Graph对象并自己渲染它,例如在ipython notebook中显示它:
from IPython.display import SVG
from keras.utils.visualize_util import model_to_dot
SVG(model_to_dot(model).create(prog='dot', format='svg'))

原文链接

本文为云栖社区原创内容,未经允许不得转载。



本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/521715.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

让我再撸一次HashMap

戳蓝字“CSDN云计算”关注我们哦&#xff01;对于JAVA求职者来说&#xff0c;HashMap可谓是集合类的重中之重&#xff0c;甚至你在复习的时候&#xff0c;其他集合类都不用看&#xff0c;专攻HashMap即可。然而&#xff0c;鉴于网上大部分的关于HashMap的面试方向文章&#xff…

负载均衡SLB新功能介绍

摘要&#xff1a; 随着网络的各个核心部分业务量的提高&#xff0c;访问量和数据流量的快速增长&#xff0c;其处理能力和计算强度也相应地增大&#xff0c;使得单一的服务器设备根本无法承担。通过负载均衡扩展现有网络设备和服务器的带宽、增加吞吐量、加强网络数据处理能力、…

架构师必备技能:教你画出一张合格的技术架构图

戳蓝字“CSDN云计算”关注我们哦&#xff01;当我们想用一张或几张图来描述我们的系统时&#xff0c;是不是经常遇到以下情况&#xff1a;对着画布无从下手、删了又来&#xff1f;如何用一张图描述我的系统&#xff0c;并且让产品、运营、开发都能看明白&#xff1f;画了一半的…

人工智能让边缘计算更有价值!

摘要&#xff1a; 继云计算之后&#xff0c;边缘计算这把火你了解多少&#xff1f;来了解一下吧。3月28日&#xff0c;在2018云栖大会深圳峰会上&#xff0c;阿里云宣布2018年将战略投入到边缘计算技术领域&#xff0c;并推出了首个IOT边缘计算产品Link Edge,将阿里云在云计算、…

硬件测试工程师之EMC项目-电磁干扰-谐波测试的引文

1&#xff1a; 介绍EMC项目-谐波测试 1.1引入文章 硬件测试工程师所面对的测试产品&#xff0c;尤其对于EMC来说&#xff0c;测试的种类很多&#xff0c;都是电器居多&#xff0c;例如电磁炉&#xff0c;USB适配器&#xff0c;空调&#xff0c;开关驱动&#xff0c;智能挂壁式…

儿童节,5岁宝宝写给程序员爸爸的一封信!萌翻了!

摘要&#xff1a; 六一儿童节到了&#xff0c;云栖社区特别采访了几位可爱的宝宝&#xff0c;来分享他们眼中的程序员爸爸妈妈。六一儿童节到了&#xff0c;云栖社区特别采访了几位可爱的宝宝&#xff0c;来分享他们眼中的程序员爸爸妈妈。最后一位宝宝的回答&#xff0c;萌翻了…

外部jar包_大数据系列之PySpark读写外部数据库

本文以MySQL和HBASE为例&#xff0c;简要介绍Spark通过PyMySQL和HadoopAPI算子对外部数据库的读写操作1、PySpark读写MySQLMySQL环境准备参考“数据库系列之MySQL主从复制集群部署”部分1.1 PyMySQL和MySQLDB模块PyMySQL是在Python3.x版本中用于连接MySQL服务器的一个库&#x…

Vue + Spring Boot 项目实战(二):使用 CLI 搭建 Vue.js 项目

文章目录一、安装 Vue CLI二、构建前端项目2.1.创建一个基于 webpack 模板的项目2.2. 安装图解2.3. 项目结构总览2.4. 运行项目2.5. 浏览器验证项目GitHub 地址&#xff1a; https://github.com/Antabot/White-Jotter在动手操作之前&#xff0c;我希望大家已经清楚什么是 “前后…

这本销量突破70W+的 Python 插画式书籍,凭什么这么火?

戳蓝字“CSDN云计算”关注我们哦&#xff01;最近不管我在互联网看新闻、看视频或者看公众号文章&#xff0c;甚至我在淘宝的时候都会看到一个词&#xff0c;那就是“Python”&#xff0c;我也不知道我对它做了什么&#xff0c;为什么老是给我推送Python&#xff1f;甚至我和程…

【人脸识别终结者】多伦多大学反人脸识别,身份欺骗成功率达99.5%

摘要&#xff1a; 多伦多大学研究人员设计新算法&#xff0c;通过动态地干扰人脸识别工具来保护用户的隐私。结果表明&#xff0c;他们的系统可以将原本可检测到的人脸比例从接近100%降低到0.5&#xff05;。在一些社交媒体平台&#xff0c;每次你上传照片或视频时&#xff0c;…

php中$stu_by,PHP基础案例二:计算学生年龄

一、需求分析为了方便、准确、快捷的展示学的年龄&#xff0c;系统通常根据学生的出生日期进行自动计算。下面请利用PHP变量分别保存学生的年月日&#xff0c;并通过PHP中的data函数获取当前年月日&#xff0c;最后计算出学生的年龄。例如&#xff1a;出生年月日为&#xff1a;…

iPhone11首批用户评价实属翻车现场;据悉,谷歌宣布投资30亿欧元扩大欧洲数据中心……...

关注并标星星CSDN云计算极客头条&#xff1a;速递、最新、绝对有料。这里有企业新动、这里有业界要闻&#xff0c;打起十二分精神&#xff0c;紧跟fashion你可以的&#xff01;每周三次&#xff0c;打卡即read更快、更全了解泛云圈精彩newsgo go go 微软说&#xff1a;杀手机器…

阿里七层流量入口 Tengine硬件加速探索之路

摘要&#xff1a; Tengine在软件层面已经有了深度的调试和优化经验&#xff0c;但是在硬件层面&#xff0c;通用处理器&#xff08;CPU&#xff09;已经进入了摩尔定律&#xff0c;有了瓶颈。而在业务量突飞猛进的当下&#xff0c;如何利用硬件来提升性能&#xff0c;承载双11等…

新增16条设计规约!阿里巴巴Java开发手册(详尽版)开放下载!

摘要&#xff1a;2018年6月&#xff0c;《阿里巴巴Java开发手册》再次刷新代码规范认知&#xff0c;我们新增了16条设计规约&#xff01;现免费开放下载&#xff0c;不可错过&#xff01;《阿里巴巴Java开发手册》是阿里内部Java工程师所遵循的开发规范&#xff0c;涵盖编程规约…

受困于敏捷开发的数据与架构?肿么办?

戳蓝字“CSDN云计算”关注我们哦&#xff01;译|Lorraine Lo文|Isaac Sacolick来源|InfoWorld网站如今企业强调敏捷开发不是一天两天&#xff0c;但在此过程中敏捷团队通常都会面临的一大挑战就是如何定义以及遵循开发中数据架构的模式和标准这一系列问题。人们之所以认为推动数…

Vue + Spring Boot 项目实战(三):使用IntelliJ IDEA快速生成 Vue.js 项目

文章目录一、使用idea Vue插件生成项目结构1.1. Create New Project1.2. 设置项目地址1.3. 确认项目名称1.4. 项目描述1.5. 作者信息1.6. 编译模板1.7. 安装路由二、安装node_modules模块三、启动项目四、Vue 项目结构分析4.1. 概览4.2. index.html4.3. App.vue4.4. main.js4.5…

沙漠种水稻,88岁的袁隆平又创造奇迹!他参与的“袁米”还有个大计划

摘要&#xff1a; 今年88岁的袁隆平说&#xff0c;他退休之前想看到两件事情&#xff1a;一件是杂交稻大面积亩产1200公斤&#xff0c;另一件是海水稻研发成功。 这几天&#xff0c;关于海水稻的话题再次成为热点。 上周&#xff0c;在两院院士大会上&#xff0c;海水稻和杂交水…

八年磨一剑,阿里云ApsaraDB for HBase2.0正式上线

摘要&#xff1a; ApsaraDB for HBase2.0于2018年6月6日即将正式发布上线啦&#xff01; 它是基于社区HBase2.0稳定版的升级&#xff0c;也是阿里HBase多年的实践经验和技术积累的持续延伸&#xff0c;全面解决了旧版本碰到的核心问题&#xff0c;并做了很多优化改进&#xff0…

oracle 12.2 启用分片,关于Oracle Sharding,你想知道的都在这里

编辑手记&#xff1a;随着Oracle12.2的发布&#xff0c;Sharding技术也逐渐变得越来越强大&#xff0c;关于Sharding,你所关心的问题的答案&#xff0c;可能都在这里。注&#xff1a;本文来自Oracle FAQ文档翻译相关阅读&#xff1a;什么是Oracle ShardingOracle Sharding是为O…

看完这篇还不会kafka,我跪榴莲!

戳蓝字“CSDN云计算”关注我们哦&#xff01;Kafka 对外使用 Topic 的概念&#xff0c;生产者往 Topic 里写消息&#xff0c;消费者从中读消息。为了做到水平扩展&#xff0c;一个 Topic 实际是由多个 Partition 组成的&#xff0c;遇到瓶颈时&#xff0c;可以通过增加 Partiti…