当前位置: 首页 > news >正文

[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

相关文章:

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

前言: DNN 是神经网络的里面基础核心模型之一.这里面结合DNN 介绍一下如何解决 深度学习里面过拟合,欠拟合问题 目录: DNN 训练常见问题 过拟合处理 欠拟合处理 keras 项目 一 DNN 训练常见问题 我们在深度学习网络训练的时候经常会遇到下面…...

Nginx快速入门:实现企业安全防护|nginx部署https,ssl证书(七)

0. 引言 之前我们讲到nginx的一大核心作用就是实现企业安全防护,而实现安全防护的原理就是通过部署https证书,以此实现参数加密访问,从而加强企业网站的安全能力。 nginx作为各类服务的统一入口,只需要在入口处部署一个证书&…...

将Go语言开发的Web程序部署到K8S

搭建K8S基础环境 如果已经有K8S环境的同学可以跳过,如果没有,推荐你看看我的《Ubuntu22加Minikue搭建K8S环境》,课程目录如下: Ubuntu22安装Vscode 下载:https://code.visualstudio.com/Download 安装命令&#…...

Python发送数据到Unity实现

Unity设置: 打开Unity项目。创建一个空的GameObject,并附加一个新的脚本TCPReceiver using System.Net; using System.Net.Sockets; using System.Text; using UnityEngine; using System.Threading;public class MyListener : MonoBehaviour {Thread thread;pub…...

Unity 渲染顺序受哪些影响(相机depth、SortingLayer、Render Queue、透明)

目录 相机深度(Camera Depth) Clear Flags 多相机渲染不同部分 SortingLayer 先后顺序 Render Queue Render Queue的作用 Render Queue的分类 GeometryLast(值为2500) 渲染顺序总结 相机深度(Camera Depth&am…...

【论文笔记】Run, Don’t Walk: Chasing Higher FLOPS for Faster Neural Networks

论文地址:Run, Dont Walk: Chasing Higher FLOPS for Faster Neural Networks 代码地址:https://github.com/jierunchen/fasternet 该论文主要提出了PConv,通过优化FLOPS提出了快速推理模型FasterNet。 在设计神经网络结构的时候&#xff…...

python常用函数汇总

python常用函数汇总 对准蓝字按下左键可以跳转哦 类型函数数值相关函数abs() divmod() max() min() pow() round() sum()类型转换函数ascii() bin() hex() oct() bool() bytearray() bytes() chr() complex() float() int() 迭代和循环函数iter() next() e…...

阶段十-物业项目

可能遇到的错误&#xff1a; 解决jdk17javax.xml.bind.DatatypeConverter错误 <!--解决jdk17javax.xml.bind.DatatypeConverter错误--><dependency><groupId>javax.xml.bind</groupId><artifactId>jaxb-api</artifactId><version>…...

使用 Jekyll 构建你的网站 - 初入门

文章目录 一、Jekyll介绍二、Jekyll安装和启动2.1 配置Ruby环境1&#xff09;Windows2&#xff09;macOS 2.2 安装 Jekyll2.3 构建Jekyll项目2.4 启动 Jekyll 服务 三、Jekyll常用命令四、目录结构4.1 主要目录4.2 其他的约定目录 五、使用GitLink构建Jekyll博客5.1 生成Jekyll…...

【数据库】postgressql设置数据库执行超时时间

在这篇文章中&#xff0c;我们将深入探讨PostgreSQL数据库中的一个关键设置&#xff1a;SET statement_timeout。这个设置对于管理数据库性能和优化查询执行时间非常重要。让我们一起来了解它的工作原理以及如何有效地使用它。 什么是statement_timeout&#xff1f; statemen…...

SQL语言之DDL

目录结构 SQL语言之DDLDDL操作数据库查询数据库创建数据库删除数据库使用某个数据库案例 DDL操作表创建表查看表结构查询表修改表添加字段删除字段修改字段的类型修改字段名和字段类型 修改表名删除表案例 SQL语言之DDL ​ DDL&#xff1a;数据定义语言&#xff0c;用来定义数…...

hive高级查询(2)

-- 分组查询 SELECT sex,SUM(mark) sum_mark FROM score GROUP BY sex HAVING sum_mark > 555; SELECT sex,sum_mark FROM( SELECT sex,SUM(mark) sum_mark FROM score GROUP BY sex ) t WHERE sum_mark > 555; SELECT AVG(gid),SUM(gid)/COUNT(gid) FROM …...

golang的jwt学习笔记

文章目录 初始化项目加密一步一步编写程序另一个参数--加密方式关于StandardClaims 解密解析出来的怎么用关于`MapClaims`上面使用结构体的全代码实战项目关于验证这个项目的前端初始化项目 自然第一步是暗转jwt-go的依赖啦 #go get github.com/golang-jwt/jwt/v5 go get githu…...

第十五节TypeScript 接口

1、简介 接口是一系列抽象方法的声明&#xff0c;是一些方法特征的集合&#xff0c;这些方法都应该是抽象的&#xff0c;需要有由具体的类去实现&#xff0c;然后第三方就可以通过这组抽象方法调用&#xff0c;让具体的类执行具体的方法。 2、接口的定义 interface interface_…...

【hadoop】解决浏览器不能访问Hadoop的50070、8088等端口?!

【hadoop】解决浏览器不能访问Hadoop的50070、8088等端口&#xff1f;&#xff01;&#x1f60e; 前言&#x1f64c;【hadoop】解决浏览器不能访问Hadoop的50070、8088等端口&#xff1f;&#xff01;查看自己的配置文件&#xff1a;最终成功访问如图所示&#xff1a; 总结撒花…...

14.bash shell中的for/while/until循环

文章目录 shell循环语句for命令**读取列表中的值****读取列表中的复杂值****从变量读取列表**迭代数组**从命令读取值****用通配符读取目录**C语言风格的shell for循环 shell循环while命令shell 循环的until命令shell循环跳出的break/continue命令break命令continue命令trick 欢…...

RPC(6):RMI实现RPC

1RMI简介 RMI(Remote Method Invocation) 远程方法调用。 RMI是从JDK1.2推出的功能&#xff0c;它可以实现在一个Java应用中可以像调用本地方法一样调用另一个服务器中Java应用&#xff08;JVM&#xff09;中的内容。 RMI 是Java语言的远程调用&#xff0c;无法实现跨语言。…...

strlen和sizeof的初步理解

大家好我是Beilef&#xff0c;一个美好的下我接触到编程并且逐渐喜欢。我虽然不是科班出身但是我会更加努力地去学&#xff0c;有啥不对的地方请斧正 文章目录 目录 文章目录 前言 想必大家对sizeof肯定很了解&#xff0c;那对strlen又了解多少。其实这个问题应该让不少人困扰。…...

纯CSS的华为充电动画,它来了

&#x1f4e2; 鸿蒙专栏&#xff1a;想学鸿蒙的&#xff0c;冲 &#x1f4e2; C语言专栏&#xff1a;想学C语言的&#xff0c;冲 &#x1f4e2; VUE专栏&#xff1a;想学VUE的&#xff0c;冲这里 &#x1f4e2; Krpano专栏&#xff1a;想学Krpano的&#xff0c;冲 &#x1f514…...

在架构设计中,前后端分离有什么好处?

前后端分离是一种架构设计模式&#xff0c;将前端和后端的开发分别独立进行&#xff0c;它带来了多方面的好处&#xff1a; 1、独立开发和维护&#xff1a; 前后端分离允许前端和后端开发团队独立进行工作。这意味着两个团队可以并行开发&#xff0c;提高了整体的开发效率。前…...

MPNet:旋转机械轻量化故障诊断模型详解python代码复现

目录 一、问题背景与挑战 二、MPNet核心架构 2.1 多分支特征融合模块(MBFM) 2.2 残差注意力金字塔模块(RAPM) 2.2.1 空间金字塔注意力(SPA) 2.2.2 金字塔残差块(PRBlock) 2.3 分类器设计 三、关键技术突破 3.1 多尺度特征融合 3.2 轻量化设计策略 3.3 抗噪声…...

在rocky linux 9.5上在线安装 docker

前面是指南&#xff0c;后面是日志 sudo dnf config-manager --add-repo https://download.docker.com/linux/centos/docker-ce.repo sudo dnf install docker-ce docker-ce-cli containerd.io -y docker version sudo systemctl start docker sudo systemctl status docker …...

Python爬虫(一):爬虫伪装

一、网站防爬机制概述 在当今互联网环境中&#xff0c;具有一定规模或盈利性质的网站几乎都实施了各种防爬措施。这些措施主要分为两大类&#xff1a; 身份验证机制&#xff1a;直接将未经授权的爬虫阻挡在外反爬技术体系&#xff1a;通过各种技术手段增加爬虫获取数据的难度…...

微软PowerBI考试 PL300-在 Power BI 中清理、转换和加载数据

微软PowerBI考试 PL300-在 Power BI 中清理、转换和加载数据 Power Query 具有大量专门帮助您清理和准备数据以供分析的功能。 您将了解如何简化复杂模型、更改数据类型、重命名对象和透视数据。 您还将了解如何分析列&#xff0c;以便知晓哪些列包含有价值的数据&#xff0c;…...

技术栈RabbitMq的介绍和使用

目录 1. 什么是消息队列&#xff1f;2. 消息队列的优点3. RabbitMQ 消息队列概述4. RabbitMQ 安装5. Exchange 四种类型5.1 direct 精准匹配5.2 fanout 广播5.3 topic 正则匹配 6. RabbitMQ 队列模式6.1 简单队列模式6.2 工作队列模式6.3 发布/订阅模式6.4 路由模式6.5 主题模式…...

[免费]微信小程序问卷调查系统(SpringBoot后端+Vue管理端)【论文+源码+SQL脚本】

大家好&#xff0c;我是java1234_小锋老师&#xff0c;看到一个不错的微信小程序问卷调查系统(SpringBoot后端Vue管理端)【论文源码SQL脚本】&#xff0c;分享下哈。 项目视频演示 【免费】微信小程序问卷调查系统(SpringBoot后端Vue管理端) Java毕业设计_哔哩哔哩_bilibili 项…...

Bean 作用域有哪些?如何答出技术深度?

导语&#xff1a; Spring 面试绕不开 Bean 的作用域问题&#xff0c;这是面试官考察候选人对 Spring 框架理解深度的常见方式。本文将围绕“Spring 中的 Bean 作用域”展开&#xff0c;结合典型面试题及实战场景&#xff0c;帮你厘清重点&#xff0c;打破模板式回答&#xff0c…...

从面试角度回答Android中ContentProvider启动原理

Android中ContentProvider原理的面试角度解析&#xff0c;分为​​已启动​​和​​未启动​​两种场景&#xff1a; 一、ContentProvider已启动的情况 1. ​​核心流程​​ ​​触发条件​​&#xff1a;当其他组件&#xff08;如Activity、Service&#xff09;通过ContentR…...

学习一下用鸿蒙​​DevEco Studio HarmonyOS5实现百度地图

在鸿蒙&#xff08;HarmonyOS5&#xff09;中集成百度地图&#xff0c;可以通过以下步骤和技术方案实现。结合鸿蒙的分布式能力和百度地图的API&#xff0c;可以构建跨设备的定位、导航和地图展示功能。 ​​1. 鸿蒙环境准备​​ ​​开发工具​​&#xff1a;下载安装 ​​De…...

uniapp 集成腾讯云 IM 富媒体消息(地理位置/文件)

UniApp 集成腾讯云 IM 富媒体消息全攻略&#xff08;地理位置/文件&#xff09; 一、功能实现原理 腾讯云 IM 通过 消息扩展机制 支持富媒体类型&#xff0c;核心实现方式&#xff1a; 标准消息类型&#xff1a;直接使用 SDK 内置类型&#xff08;文件、图片等&#xff09;自…...