循环神经网络六-Pytorch中的序列化器

news2024/11/15 9:06:51

目录

一.梯度消失

二.梯度爆炸

三.解决梯度消失或者爆炸

四序列化器

1.nn.sequential

2.nn.BatchNormld

3.nn.Dropout


一.梯度消失

假设我们由四层神经网络,每一次只有一个神经元X

那么在计算它的梯度的时候就有:▽w1 = x1f(a1)’w2f(b1)’w3*▽out

如果我们使用的激活函数是sigmoid,而sigmoid的导数图为:

假设每层都取得sigmoid导数的最大值1/4,那么在反向传播的时候

X1=0.5,w1=w2=w3=0.5

\nabla w1< \frac{1}{2} * \frac{1}{4}* \frac{1}{2}* \frac{1}{4}*\frac{1}{2}*\nabla out = \frac{1}{2^7} \nabla out

当权重初始过小或者使用易饱和神经元sigmoid在y=0,1处梯度接近0,而无法更新参数时神经网络在反向传播呈现指数倍缩小,产生消失现象

二.梯度爆炸

假设X2=2,w1=w2=w3=2

当权重过初始值过大时,梯度神经网络在反向传播时也呈现指数倍放大,产生爆炸现象

三.解决梯度消失或者爆炸

1.替换易训练神经元

2.改进优化算法,使用adam算法

3.使用 batch normalization

四序列化器

1.nn.sequential

这是一个有序的容器,其中传入的是构造器类(各种用来处理输入数据的类),最终输入数据会被sequential中的构造类依次执行

layer = nn.Sequential(
            nn.Linear(input_dim, n_hidden_1), 
            nn.ReLU(True), #inplace=False 是否对输入进行就地修改,默认为False
            nn.Linear(n_hidden_1, n_hidden_2),
            nn.ReLU(True),
            nn.Linear(n_hidden_2, output_dim) # 最后一层不需要添加激活函数
             )

在上述构造中,可以直接调用layer(x),得到的输出x的倍执行顺序就是Sequential中定义的顺序:

1.倍隐层1执行,形状改变为[batch_size ,n_hidden_1]

2.倍relu执行,形状不变

3.被隐层2执行,形状变成[batch_size, n_hidden_2]

4.被relu执行,形状不变

5.被最后一层执行,形状变成[batch_size,output_dim]

2.nn.BatchNormld

翻译成中文就是批量规范化,就是在每个样本训练的过程中,对参数进行归一化处理,从而达到加快训练速度的效果

以sigmoid为例,在反向传播的过程中,在值为0,1的时候,梯度接近0,导致参数被更新的幅度很小,训练速度很漫,但是如果对数据进行归一化处理,将数据压缩在[0-1]之间,从而让参数更新的幅度变大,提高训练速度

batchNorm一般会放到激活函数之后,即对输入进行激活处理之后再进入batchNorm

layer = nn.Sequential(
            nn.Linear(input_dim, n_hidden_1),
    		
            nn.ReLU(True), 
    		nn.BatchNorm1d(n_hidden_1)
    
            nn.Linear(n_hidden_1, n_hidden_2),
            nn.ReLU(True),
    		nn.BatchNorm1d(n_hidden_2)

            nn.Linear(n_hidden_2, output_dim) 
             )

3.nn.Dropout

dropout在前面已经介绍过,可以理解为对参数的随机失活

1.增加模型的稳定性

2.解决过拟合问题

3.可理解为训练后的模型是多个模型组合之后的结果,类似随机森林

layer = nn.Sequential(
            nn.Linear(input_dim, n_hidden_1),
            nn.ReLU(True), 
    		nn.BatchNorm1d(n_hidden_1)
    		nn.Dropout(0.3) #0.3 为dropout的比例,默认值为0.5
    
            nn.Linear(n_hidden_1, n_hidden_2),
            nn.ReLU(True),
    		nn.BatchNorm1d(n_hidden_2)
    		nn.Dropout(0.3)
    
            nn.Linear(n_hidden_2, output_dim) 
             )

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

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

相关文章

向量新增的3种方式

本文介绍向量检索服务如何通过控制台、SDK、API三种不同的方式新增向量。 前提条件 已开通向量检索服务。如未开通&#xff0c;请先开通服务。 已创建Collection。 控制台方式 登录向量检索服务控制台。 在左侧导航栏单击Cluster列表&#xff0c;选中需要新增向量的Collecti…

创意设计师必看:9个强大的页面设计工具推荐

网页设计并不容易&#xff0c;实用的网页设计工具更难找到。随着网络的快速发展&#xff0c;网页迅速崛起&#xff0c;网页设计也很流行。本文收集了7种良知和实用的网页设计工具&#xff0c;每一种都受到网页设计师的青睐&#xff0c;以确保易于使用和使用。我希望它能帮助你提…

leetcode53_最大子数组和

思路 动态规划 dp 数组&#xff1a;dp[i] 代表已元素nums[i]结尾的连续子数组的最大和 func maxSubArray(nums []int) int {dp : make([]int, len(nums))dp[0] nums[0]ans : nums[0]for i:1; i < len(nums); i {if dp[i-1] < 0 {dp[i] nums[i]}else{dp[i] dp[i-1] …

mysql8.4.2数据库做主从复制

linux rocky 9.2系统安装mysql-wsrep-8.4.2-26.20-linux-x86_64.tar.gz二进制包-CSDN博客文章浏览阅读472次&#xff0c;点赞7次&#xff0c;收藏4次。linux rocky 9.2系统安装mysql-wsrep-8.4.2-26.20-linux-x86_64.tar.gz二进制包https://blog.csdn.net/xikui1551/article/de…

对象字面量

还是大剑师兰特&#xff1a;曾是美国某知名大学计算机专业研究生&#xff0c;现为航空航海领域高级前端工程师&#xff1b;CSDN知名博主&#xff0c;GIS领域优质创作者&#xff0c;深耕openlayers、leaflet、mapbox、cesium&#xff0c;canvas&#xff0c;webgl&#xff0c;ech…

nuxt 重构已有vue项目使用心得

用现有的vue-cli 项目 改成 nuxt 项目 真的是废了 好大的劲 因为之前的项目是中大型项目 重新改成html css 可能废很大工作量这次采用nuxt 框架来重新构架 因为2个项目都是基于vue 编写 1.将之前的src 文件夹 整个拖进去 在nuxt.config.js 引入 srcDir: "src/" 2.…

mysql数据库之运算符

安全等于运算符(<=>) 这个操作符和 = 操作符执行相同的比较操作,不过<=>可以用来判断NULL值。在两个操作数均为NULL时,其返回值为1而不为NULL;而当一个操作数为NULL时,其返回值为0而不为NULL。 下面分别是 SELECT NULL <=>1 SELECT 1<=>0 SEL…

力扣面试经典算法150题:买卖股票的最佳时机

买卖股票的最佳时机 今天的题目是力扣面试经典150题中的数组的简单题: 多数元素 题目链接&#xff1a;https://leetcode.cn/problems/best-time-to-buy-and-sell-stock/description/?envTypestudy-plan-v2&envIdtop-interview-150 题目描述 给定一个数组 prices&#xf…

waveInAddBuffer死锁的大雷解决

项目场景&#xff1a; 从来没有一个bug让我这么抓狂&#xff0c;足足查了3天3夜&#xff0c;官方文档翻了一遍说的基本无用。具体项目就是使用waveIn系列函数获取windows系统麦克风数据&#xff0c;虽然windows上有好几种方法获取麦克风数据&#xff0c;我最终还是选择了它。 …

导函数相对于原函数特有的性质

引入 f(x) 在区间[a,b]上存在&#xff0c;函数值之间是无牵无挂的&#xff0c;连续存在还是间断存在都不一定。f(x) 在区间[a,b]上连续&#xff0c;函数值之间距离是一个无穷小量。f(x) 在区间[a,b]上可导&#xff0c;函数值之间距离是一个比连续跟小的无穷小量&#xff0c;函…

2024剪辑神器盘点:四大热门剪辑软件推荐!

亲爱的朋友们&#xff0c;想要制作出精彩短视频&#xff0c;却苦于找不到合适的剪辑工具&#xff1f;别担心&#xff0c;今天要向大家推荐几款剪辑软件&#xff0c;它们能帮助大家更好地完成视频创作&#xff01; 福昕视频剪辑 链接&#xff1a;www.pdf365.cn/foxit-clip/ 对…

基于VEH的无痕HOOK

这里的无痕HOOK指的是不破坏程序机器码,这样就可以绕过CRC或MD5的校验。 VEH利用了Windows的调试机制和异常处理,人为抛出异常,从异常的上下文中获取寄存器信息。 DLL入口 // dllmain.cpp : 定义 DLL 应用程序的入口点。 #include "pch.h" #include "CHoo…

PI-GNN论文翻译.md

PI-GNN论文翻译 Continual Learning on Dynamic Graphs via Parameter Isolation 基于参数隔离的动态图的持续学习 ABSTRACT 许多现实世界的图学习任务需要处理出现新节点和边的动态图。动态图学习方法通常会遇到灾难性遗忘问题&#xff0c;即先前图学到的知识会被新图的更…

VueTreeselect自定义label

插槽 使用插槽 //node.raw&#xff1a;所有传入的数据项<treeselectv-model"areaCode":options"deptOptions":normalizer"normalizer"><div slot"value-label" slot-scope"{ node }">{{ node.raw.title }}<…

CommonJs模块化简明笔记

1、什么是模块化 模块化是指将一个复杂的程序依据一定的规则&#xff08;规范&#xff09;封装成几个块&#xff08;文件&#xff09;&#xff0c;并进行组合在一起。 最早我们开发将所有的代码写在一个js文件中&#xff0c;随着需求越来越复杂&#xff0c;代码量越来越大&am…

硬盘文件数据销毁|文件销毁|硬盘销毁|数据销毁|中国成就的伟大与数据安全在新时代国家安全中的关键作用

在当今世界&#xff0c;中国的发展成就举世瞩目&#xff0c;但令人惊讶的是&#xff0c;大多数人可能并未充分意识到其伟大之处。与此同时&#xff0c;数据安全作为国家安全的重要组成部分&#xff0c;其重要性在新时代愈发凸显。 二、中国取得的伟大成就 中国在经济领域的崛起…

iOS ------ 事件响应链

响应者链 响应者链是由一系列链接在一起的响应者&#xff08;UIResponser之类&#xff1a;UIApplication&#xff0c;UIViewController&#xff0c;UIView&#xff09;注组成的。一般情况下&#xff0c;一条响应链开始于第一响应者&#xff0c;结束于application对象。如果一个…

Ashok:一款多功能开源网络侦查OSINT工具

关于Ashok Ashok是一款多功能开源网络侦查公开资源情报OSINT工具&#xff0c;该工具可谓是OSINT领域中的瑞士军刀&#xff0c;广大研究人员可以使用该工具轻松完成网络侦查任务。 侦察是渗透测试的第一阶段&#xff0c;这意味着在计划任何实际攻击之前收集信息。因此&#xff…

【Linux】输入输出重定向

目录 一、概念 二、重定向的本质 三、系统调用接口dup和dup2 3.1 dup 3.2 dup2 一、概念 在之前对Linux的学习中&#xff0c;我们有接触过一系列的重定向命令&#xff0c;例如 >、>>等 它们可以将一个命令的输出或输入重定向到其他地方&#xff0c;如echo命令…

Java泛型的理解

前言 泛型是Java中一个比较重要的特性&#xff0c;是于JDK5引入新特性&#xff0c;其主要目的是为了提供编译时的类型安全检测机制和简化代码。本文主要探讨一下泛型的使用。 假如说没有泛型 假如说没有泛型&#xff0c;可以举一个例子&#xff1a; ArrayList list new Ar…