深度学习技巧与窍门

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

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

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

       类似于卷积神经网络(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,一经查实,立即删除!

相关文章

Python库大全(涵盖了Python应用的方方面面),建议收藏留用!

学Python&#xff0c;想必大家都是从爬虫开始的吧。毕竟网上类似的资源很丰富&#xff0c;开源项目也非常多。 Python学习网络爬虫主要分3个大的版块&#xff1a;抓取&#xff0c;分析&#xff0c;存储 当我们在浏览器中输入一个url后回车&#xff0c;后台会发生什么&#xff1…

java.io.IOException 权限不够

这几天修改了jenkins发布时启动java项目的用户。原先是root现在换成普通用户了&#xff0c;结果部署下来会报错 java.io.IOException: 权限不够 发现临时文件的创建目录是/tmp/poifiles&#xff0c;到服务器查看/tmp/poifiles这个文件的创建用户是root&#xff0c;java普通用户…

让我再撸一次HashMap

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

sklearn svm 调参_sklearn调参(验证曲线,可视化不同参数下交叉验证得分)

一 、 原始方法&#xff1a;思路&#xff1a;1. 参数从 0∞ 的一个 区间 取点&#xff0c; 方法如&#xff1a; np.logspace(-10, 0, 10) &#xff0c; np.logspace(-6, -1, 5)2. 循环调用cross_val_score计算得分。在SVM不同的惩罚参数C下的模型准确率。import matplotlib.pyp…

php json获取get请求,PHP简单的Curl的Get请求和Curl的Post请求和file_get_contents的Get请求获取接口JSON数据...

PHP携带Cookie用Curl进行Post或Get请求获取数据简单的curl请求(Get请求)function hansCurl($url){$url"https://www.yyob.com";$ip rand(0, 255) . . . rand(0, 255) . . . rand(0, 255) . . . rand(0, 255);$header[] "accept: application/json";$head…

聊聊代码整洁之道

摘要&#xff1a; Any fool can write code that a computer can understand. Good programmers write code that humans can understand. 普通的工程师堆砌代码&#xff0c;优秀的工程师优雅代码&#xff0c;卓越的工程师简化代码。Any fool can write code that a computer c…

负载均衡SLB新功能介绍

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

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

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

ios键盘done中文_IOS_IOS关闭键盘的方法,首先输入完成后按键盘上的done - phpStudy...

IOS关闭键盘的方法首先输入完成后按键盘上的done关闭键盘首先在Interface Builder中选择TextFields&#xff0c;然后在Text Field Attributes中找到Text Input Traits&#xff0c;选择Return Key为done。OK定义方法- (IBAction) textFieldDoneEditing:(id)sender; //按下Don…

php 显示对像编码,PHP面向对象之旅:类型提示

PHP是弱类型语言&#xff0c;向方法传递参数时候也不太区分类型。这样的使用会引起很多的问题&#xff0c;PHP开发者认为&#xff0c;这些问题应该是由代码书写者在书写代码时进行检验以避免。没有类型提示很危险下面的代码可能会出现问题。class NormalUser{/** 其它相关代码.…

java.net.SocketException: 权限不够

java.net.SocketException: 权限不够 一切问题的根源都是缺乏常识 0.0… 背景&#xff1a;今天部署一个spring cloud服务&#xff0c;tanainaide 服务的端口为80&#xff0c;然后我建了个tomcat用户来启动&#xff0c;但是死活起不来&#xff0c;搞了好久还以为是环境问题都重…

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

摘要&#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;我希望大家已经清楚什么是 “前后…

人工智能与大数据的完美结合

摘要&#xff1a; 人工智能是一种在大数据世界中指引方向和获取规律的方法。人工智能&#xff08;AI&#xff09;已经存在几十年了。然而&#xff0c;最近随着“大数据”的出现&#xff0c;它得到了越来越多的关注。维基百科对人工智能的释义如下:在计算机科学中&#xff0c;人…

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

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

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

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

快速运行python虚拟环境_快速入门Python 最新最流行的pipenv虚拟环境

2018的PyCon把最新型最先进的Python虚拟环境pipenv吵得火热。看了下介绍感觉真的很好用&#xff0c;它在virtualenv的基础上包装了一些更便捷的功能&#xff0c;解决了很多很多virtualenv欠缺的事情。简单说&#xff0c;pipenv就是把pip和virtualenv包装起来的一个便携工具。它…