[PyTorch][chapter 8][李宏毅深度学习][DNN 训练技巧]

前言:

   

       DNN 是神经网络的里面基础核心模型之一.这里面结合DNN 介绍一下如何解决

深度学习里面过拟合,欠拟合问题


目录:

  1.      DNN 训练常见问题
  2.      过拟合处理
  3.     欠拟合处理
  4.     keras 项目


一  DNN 训练常见问题

  我们在深度学习网络训练的时候经常会遇到下面两类问题:

         1:  训练集上面很差 : 欠拟合

         2: 训练集上面很好, 测试集上面很差: 过拟合


二  过拟合解决

过拟合解决方案

主要有以下三个处理思路

1 Early Stopped

2 L1 L2 正规化

3 Dropout

4: 增加训练集上面的数据量

 2.1  Early Stopping

   方案

   这个数据集分为3部分: Training Data,validation data,Test Data
   1  将训练的数据分为Training Data 和validation data
   2  每个epoch结束后(或每N个epoch后):计算validation data 的 accuracy 
   3: 更新 最优 validation data accuracy 对应的网络参数
   3  随着epoch的增加,如果validation data 连续多次没有提升,则停止训练;
   4  将之前validation data 准确率最高时的权重作为网络的最终参数。

2.2  正规化

      分为L1,L2 正规化.

2.3 Dropout

原网络结构

            z^{l+1}=w^{l+1}a^l+b^{l+1}

            a^{l+1}=\sigma(z^{l+1})

训练:

            Dropout

            a^{l}: 上面每个输入值以p%的概率变为0     

           z^{l+1}=w^{l+1}a^l+b^{l+1}

            a^{l+1}=\sigma(z^{l+1})

测试: 

          权重系数

             w^{l}=w^l*(1-p)

            一般p 设置为0.5

           

4  增加数据集上面数据量

      作用  降低方差


三  欠拟合

欠拟合处理方案

主要有下面5个处理思路:

     1 超参数调节: 学习率 训练轮次,batch_size

     2 更换激活函数

     3 梯度更新算法优化

     4  网络模型优化

     5 损失函数 更换

3.1  超参数调参

         主要更换学习率,增加迭代轮数等

 

3.2 更换激活函数

      DNN 随着网络层数的增加会出现梯度弥散现象,可以通过把激活函数sigmod 更换为

ReLu 一定程度上面优化该方案。    

    更换激活函数 ReLu(导数为1,链式求导的时候连乘不会减少)

        增加,减少 网络层数(梯度弥散,梯度爆炸)

        

3.3 梯度更新优化算法

      方案1  SGD 随机梯度下降

         \theta=\theta-\eta \bigtriangledown J(\theta)

        当梯度为0,参数无法更新容易陷入到局部极小值点

        学习率太大: 不容易进入到极小值点,容易发生网络震荡

         学习率太小: 收敛速度慢

 方案2 Momentum: 当前的梯度 = 当前的梯度+历史梯度

           SGD 会发生震荡而迟迟不能接近极小值,所以对更新梯度引入Momentum概念,加速SGD,并抑制震荡(也就是在SGD基础上引入了一阶动量)

            初始化动量:

                           m_0 =0: 动量

     

                             m_{t}=\lambda m_{t-1}+(1-\lambda)\bigtriangledown J(\theta_t): 动量

                             \theta_t=\theta_t -\eta m_t

           整个思想: 有点跟马尔科夫链时序链相似,当前输出值不仅仅跟当前的

输入相关,也跟历史值相关。

            

方案3:Adagrad (Adaptive Gradient,自适应梯度)

             不同参数进行不同程度的更新 - 逐参数适应学习率方法

           方案:

          在Adagrad算法中,每个参数的学习率各不相同。计算某参数的学习率时需将该参数前面所有时间步的梯度平方求和,随着时间步的增加,学习率将减小.

      v_t=\sum_{\tau=0}^{t}g_{\tau }^2

       \theta_t=\theta_t-\frac{\eta }{\sqrt{v_t+\varepsilon }}g_t

      

v_t: 二阶动量,权重系数里面的每个系数单独计算

\epsilon =1e-7

g_t: 当前权重系数的梯度

Adgrad方法中,学习率一直在衰减,所以可以起到抑制震荡的作用,

对于频繁更新的参数,它们的二阶动量比较大,学习率小;

对于不怎么更新的参数,它们的二阶动量比较小,学习率就大。

但因为那个分母是单调递增的,会使得学习率单调递减至0,可能会使得训练过程提前结束,即便后续还有数据也无法学到必要的知识

    

方案4 RMSProp:

Root Mean Square Propagation,自适应学习率方法,由Geoff Hinton提出,是梯度下降优化算法的扩展。在AdaGrad的基础上,对二阶动量的计算进行了改进:即有历史梯度的信息,但是我又不想让信息一直膨胀,那么只要让历史信息一直衰减就好了。因此得到RMSProp的二阶动量计算公式:

如下图所示,截图来自:https://arxiv.org/pdf/1609.04747.pdf

方案4 Adam算法即自适应时刻估计方法(Adaptive Moment Estimation)

算法思想  moment+Adagrad

同时考虑了动量 和二阶动量

3.4  更换损失函数

      比如mse 更换成CRE

3.5 更换模型

         增加网络层次,参数例如

      或者

           RNN 用LSTM  

           CNN 里面的ResNet

             解决梯度弥散问题



四    keras 

          Keras是一个由Python编写的开源人工神经网络库,可以作为Tensorflow、Microsoft-CNTK和Theano的高阶应用程序接口,进行深度学习模型的设计、调试、评估、应用和可视化 [1]。
Keras在代码结构上由面向对象方法编写,完全模块化并具有可扩展性,其运行机制和说明文档有将用户体验和使用难度纳入考虑,并试图简化复杂算法的实现难度 [1]。Keras支持现代人工智能领域的主流算法,包括前馈结构和递归结构的神经网络,也可以通过封装参与构建统计学习模型 [2]。在硬件和开发环境方面,Keras支持多操作系统下的多GPU并行计算,可以根据后台设置转化为Tensorflow、Microsoft-CNTK等系统下的组件 [3]。
Keras的主要开发者是谷歌工程师François Chollet,此外其GitHub项目页面包含6名主要维护者和超过800名直接贡献者 [4]。Keras在其正式版本公开后,除部分预编译模型外,按MIT许可证开放源代码 [1]

   keras 创建一个神经网络,训练,测试主要流程如下

model模型搭建
compile损失函数,loss, batch_size
fit训练
evaluate验证测试集
predict预测
model = Sequential()#输入层
model.add(Dense(input_dim=28*28,
units = 500,
activation='relu'))#1 隐藏层
model.add(Dense(units=500,
activation='relu'))#2 输出层
model.add(Dense(units=10,
activation='softmax'))model.compile(loss='categorical_crossentropy',
optimizer='adam'
metrics =['accuracy'])#3 pick the best function ,完成训练工作
model.fit(x_train, y_train, batch_size=100, epochs=20)#4 使用该模型
score = model.evaluate(x_test,y_test)
result = model.predict(x_test)

参考:

9-1: Tips for Training DNN_哔哩哔哩_bilibili

【优化算法】一文搞懂RMSProp优化算法 - 知乎

神经网络-优化器篇-从梯度下降到Adam方法 - 知乎

https://www.cnblogs.com/picassooo/p/12347927.html

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

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

相关文章

Oracle初始化参数修改后,是否需要重启才能生效

可以查看 v$parameter或v$parameter2动态性能视图的ISSYS_MODIFIABLE列。此列指示是否可以使用 ALTER SYSTEM 更改参数以及更改何时生效: IMMEDIATE - 无论用于启动实例的参数文件的类型如何,都可以使用 ALTER SYSTEM 更改参数。 更改立即生效。DEFERRE…

易基因2023年度DNA甲基化研究项目文章精选

大家好,这里是专注表观组学十余年,领跑多组学科研服务的易基因。 2023年,易基因参与的DNA甲基化研究成果层出不穷,小编选取其中5篇不同方向的论文与您一起来回顾。 01、易基因微量DNA甲基化测序助力中国科学家成功构建胚胎干细胞…

工厂设备维护管理有什么比较好的解决方案?哪家的工单管理系统功能强大?

生产设备对于工厂来说是十分宝贵的资产。一方面,工厂依赖设备进行生产活动,一旦设备故障就会影响产量;另一方面,工厂中的生产设备一般造价都比较高昂,如果出现故障就会增加工厂的生产成本;再一方面&#xf…

Linux部署MeterSphere结合内网穿透实现远程访问服务管理界面

文章目录 前言1. 安装MeterSphere2. 本地访问MeterSphere3. 安装 cpolar内网穿透软件4. 配置MeterSphere公网访问地址5. 公网远程访问MeterSphere6. 固定MeterSphere公网地址 前言 MeterSphere 是一站式开源持续测试平台, 涵盖测试跟踪、接口测试、UI 测试和性能测试等功能&am…

makefile教程(1)

makefile教程 makefile是什么: makefile是用户自行完成的IDE(integrated development environment集成开发环境)程序,与传统的操作系统下的编译不同,makefile可以通过用户自行安排,决定文件的编译顺序&am…

第 377 场周赛虚拟参赛记录及补题

最小数字游戏 3 题目 - 思路 模拟代码 class Solution { public:vector<int> numberGame(vector<int>& nums) {sort(nums.begin(),nums.end());vector<int> ans;for (int i 0;i < nums.size();i ) if (i&1)ans.push_back(nums[i-1]);else ans.…

postman的下载安装和使用

第一章、使用postman向后端发送请求 1.2&#xff09;postman下载与安装使用 我的百度网盘postman点击下载 提取码&#xff1a;bybp 下载后双击.exe文件直接安装 点击此次创建集合 点击此处创建请求 1.2&#xff09;发送get请求 选择自己的请求方式&#xff0c;输入请求…

Uboot

这里写目录标题 什么是Bootloader?Bootloader启动流程NAND Flash uboot是怎么和内核完成参数传递的&#xff1f; 什么是Bootloader? Linux系统要启动就必须需要一个 bootloader程序&#xff0c;也就说芯片上电以后先运行一段bootloader程序。 这段 **bootloader程序会先初始…

使用 FFmpeg 清除文件夹下所有 .mp4 文件声音

运行以下命令来清除声音&#xff1a; ffmpeg -i input.mp4 -c copy -an output.mp4这个命令会将 “input.mp4” 替换为你要处理的 .mp4 文件名。它会生成一个新的文件名为 “output.mp4” 的文件&#xff0c;该文件是没有声音的副本。 如果你想要直接替换原始文件&#xff0c;…

【网络编程】基于UDP数据报实现回显服务器程序

个人主页&#xff1a;兜里有颗棉花糖 欢迎 点赞&#x1f44d; 收藏✨ 留言✉ 加关注&#x1f493;本文由 兜里有颗棉花糖 原创 收录于专栏【网络编程】【Java系列】 本专栏旨在分享学习网络编程的一点学习心得&#xff0c;欢迎大家在评论区交流讨论&#x1f48c; 前言 我们如果…

互联网+建筑工地:技术革新引领建筑行业的未来

随着科技的飞速发展&#xff0c;互联网正日益渗透到建筑工地的方方面面。从设计、施工到管理&#xff0c;互联网建筑工地的深度融合不仅推动了建筑行业的数字化转型&#xff0c;还为工地管理、信息交流、安全监控等带来了全新的解决方案。本文将介绍互联网建筑工地的几个关键技…

java.lang.EnumConstantNotPresentException

枚举常量不存在异常。当应用试图通过名称和枚举类型访问一个枚举对象&#xff0c;但该枚举对象并不包含常量时&#xff0c;抛出该异常 1.遇到的问题是我删除了带有CustomAnnotation注解的类,启动服务器还是会抛出异常 2.首先全局搜索了相关的枚举名字 确认没有引用。后发现项目…

keras 人工智能之VGGNet神经网络的图片识别训练

上期文章我们分享了如何使用LetNet体系结构来搭建一个图片识别的神经网络: 人工智能Keras的第一个图像分类器(CNN卷积神经网络的图片识别) 本期我们基于VGGNet神经网络来进行图片的识别,且增加图片的识别种类,当然你也可以增加更多的种类,本期代码跟往期代码有很大的相…

【MySQL】:超详细MySQL完整安装和配置教程

&#x1f3a5; 屿小夏 &#xff1a; 个人主页 &#x1f525;个人专栏 &#xff1a; MySQL从入门到进阶 &#x1f304; 莫道桑榆晚&#xff0c;为霞尚满天&#xff01; 文章目录 &#x1f4d1;前言一. MySQL数据库1.1 版本1.2 下载1.3 安装1.4 客户端连接 &#x1f324;️全篇总…

LaTex设置标题页、修改文字颜色和文字高亮

目录 一、标题页 1&#xff09;常用的代码 2&#xff09;添加脚注 二、修改文字颜色和文字高亮 1&#xff09;设置文本的颜色 2&#xff09;添加文本高亮 3&#xff09;给文本添加有颜色的方框 一、标题页 主要的代码&#xff1a; \begin{titlepage} \noindent\fonts…

如何实现https密钥对登录方式

先安装docker yum install -y yum-utils device-mapper-persistent-data lvm2 yum-config-manager --add-repo https://mirrors.aliyun.com/docker-ce/linux/centos/docker-ce.repo systemctl start docker.service systemctl enable docker.service yum install -y docker…

Kali Linux—借助 SET+MSF 进行网络钓鱼、生成木马、获主机shell、权限提升、远程监控、钓鱼邮件等完整渗透测试(一)

社会工程学—世界头号黑客凯文米特尼克在《欺骗的艺术》中曾提到&#xff0c;这是一种通过对受害者心理弱点、本能反应、好奇心、信任、贪婪等心理陷阱进行诸如欺骗、伤害等危害手段。 SET最常用的攻击方法有&#xff1a;用恶意附件对目标进行 E-mail 钓鱼攻击、Java Applet攻…

nosql-redis整合测试

nosql-redis整合测试 1、创建项目并导入redis2、配置redis3、写测试类4、在redis中创建key5、访问80826、在集成测试中测试方法 1、创建项目并导入redis 2、配置redis 3、写测试类 4、在redis中创建key 5、访问8082 6、在集成测试中测试方法 package com.example.boot3.redis;…

SpringMVC之跨域请求

系列文章目录 提示&#xff1a;这里可以添加系列文章的所有文章的目录&#xff0c;目录需要自己手动添加 SpringMVC之跨域请求 提示&#xff1a;写完文章后&#xff0c;目录可以自动生成&#xff0c;如何生成可参考右边的帮助文档 文章目录 系列文章目录前言一、什么是同源策略…

doris基本操作,04-表结构的变更

整体思路 因为doris完全兼容mysql协议&#xff0c;因此操作上基本与mysql没有太大区别&#xff0c; 之需要注意与doris相关的关键字即可&#xff0c;如&#xff1a;预聚合&#xff0c;key等 当前表结构 create table table1 {siteid int default 10,citycode smallint,usern…