终于搞懂lSTM的原理了

LSTM简介

一个目前很火的特殊的RNN结构, 有效解决了RNN的梯度爆炸和长序列记忆问题

优势

LSTM 通过引入遗忘门、输入门、输出门, 来实现对特殊特征的记忆和遗忘,来达到更好的对序列数据的处理和记忆效果。

原理图:
在这里插入图片描述

总结公式:
在这里插入图片描述
大概就是这样的一个公式

简单来说就是,LSTM一共有三个门,输入门,遗忘门,输出门,
分别为三个门的程度参数,
g 是对输入的常规RNN操作。
公式里可以看到LSTM的输出有两个,细胞状态C’
和隐状态 h’
c’是经输入、遗忘门的产物,也就是当前cell本身的内容,经过输出门得到h’,就是想输出什么内容给下一单元
那么实际应用时,我们并不关心细胞本身的状态,而是要拿到它呈现出的状态
h’作为最终输出.

实现

利用pytorch 手动实现lstm

构建公式

class myLstm(nn.Module):def __init__(self,input_sz,hidden_sz):super().__init__()self.input_size=input_szself.hidden_size=hidden_szself.U_i=nn.Parameter(torch.Tensor(input_sz,hidden_sz))self.V_i = nn.Parameter(torch.Tensor(hidden_sz,hidden_sz))self.b_i = nn.parameter(torch.Tensor(hidden_sz))#f_tself.U_f = nn.Parameter(torch.Tensor(input_sz, hidden_sz))self.V_f = nn.Parameter(torch.Tensor(hidden_sz, hidden_sz))self.b_f = nn.Parameter(torch.Tensor(hidden_sz))#c_tself.U_c = nn.Parameter(torch.Tensor(input_sz, hidden_sz))self.V_c = nn.Parameter(torch.Tensor(hidden_sz, hidden_sz))self.b_c = nn.Parameter(torch.Tensor(hidden_sz))#o_tself.U_o = nn.Parameter(torch.Tensor(input_sz, hidden_sz))self.V_o = nn.Parameter(torch.Tensor(hidden_sz, hidden_sz))self.b_o = nn.Parameter(torch.Tensor(hidden_sz))self.init_weights()def forward(self,x,init_states=None):bs,seq_sz,_=x.size()hidden_seq=[]if init_states is None:h_t,c_t=(torch.zeros(bs,self.hidden_size).to(x.device),torch.zeros(bs,self.hidden_size).to(x.device))else:h_t, c_t = init_statesfor t in range(seq_sz):x_t = x[:, t, :]i_t = torch.sigmoid(x_t @ self.U_i + h_t @ self.V_i + self.b_i)f_t = torch.sigmoid(x_t @ self.U_f + h_t @ self.V_f + self.b_f)g_t = torch.tanh(x_t @ self.U_c + h_t @ self.V_c + self.b_c)o_t = torch.sigmoid(x_t @ self.U_o + h_t @ self.V_o + self.b_o)c_t = f_t * c_t + i_t * g_th_t = o_t * torch.tanh(c_t)hidden_seq.append(h_t.unsqueeze(0))hidden_seq = torch.cat(hidden_seq, dim=0)hidden_seq = hidden_seq.transpose(0, 1).contiguous()return hidden_seq, (h_t, c_t)		

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

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

相关文章

校园小情书微信小程序源码 | 社区小程序前后端开源 | 校园表白墙交友小程序

项目描述: 校园小情书微信小程序源码 | 社区小程序前后端开源 | 校园表白墙交友小程序 功能介绍: 表白墙 卖舍友 步数旅行 步数排行榜 情侣脸 漫画脸 个人主页 私信 站内消息 今日话题 评论点赞收藏 服务器环境要求:PHP7.0 MySQL5.7 效果…

Java设计模式-策略模式

策略模式1 概述2 结构3 案例实现4 优缺点5 使用场景6 JDK源码解析 策略模式 1 概述 先看下面的图片,我们去旅游选择出行模式有很多种,可以骑自行车、可以坐汽车、可以坐火车、可以坐飞机。 作为一个程序猿,开发需要选择一款开发工具&#x…

CircuitBreaker断路器(服务熔断,服务降级)

分布式系统面临的问题: 复杂分布式体系结构中的应用程序有数十个依赖关系,每个依赖关系在某些时候将不可避免地失败。 1.服务雪崩 多个微服务之间调用的时候,假设微服务A调用微服务B和微服务C,微服务B和微服务C又调用其它的微服务&#xff…

PyCharm无代码提示解决

PyCharm无代码提示解决方法 在使用PyCharm工具时,调用方法却无法进行提示,针对PyCharm无代码提示整理下解决方案 1、Python内置语法无智能提示 复现:我这里以urllib库读取网页内容为例,在通过urlopen()之后调用getur…

Tomcat Web 开发项目构建教程

1下载Tomcat安装包,下载链接:Apache Tomcat - Welcome!,我电脑环境为JDK8,所以下载Tomcat9.0 2、下载完压缩包后,解压到指定位置 3.在intelij中新建一个项目 4.选中创建的项目,双击shift,输入add frame...然…

C语言实现贪吃蛇

前言:今天给大家详细介绍一下小游戏贪吃蛇的代码。 目录 一 .贪吃蛇实现的功能 二.贪吃蛇游戏设计与分析 1.贪吃蛇以及贪吃蛇所需要维护的数据 (1)贪吃蛇蛇体 (2)数据维护 2.地图设计 (1&#x…

three.js 按键W前进、S退后、A左转、D右转运动

效果&#xff1a;W 键 前进&#xff1b;S 键后退&#xff1b;A 键左转&#xff1b;D 键右转&#xff1b;使用了 tween.js 动画库&#xff1b; 代码&#xff1a; <template><div><el-container><el-main><div class"box-card-left">&…

如何利用AWS CloudFront 自定义设置SSL

Amazon CloudFront 提供三种选项&#xff0c;可以加速整个网站并从 CloudFront 的边缘站点通过安全的 HTTPS 方式交付内容。除能够安全地从边缘站点交付内容外&#xff0c;您还可以配置 CDN 来使用针对源提取的 HTTPS 连接&#xff0c;这样您的数据就会实现从源到最终用户的端到…

仿牛客网项目---项目总结

本篇文章是对整个项目的一个总结。下面这张图要好好理解。 整个项目都是构建在SpringBoot之上的&#xff0c;所以把它画到最底下&#xff0c;其它技术依托在springboot之上。但是springboot并不是技术的核心&#xff0c;而只是起到了一个辅助的作用&#xff0c;它的作用仅仅是降…

浅拷贝,简单深拷贝

文章目录 浅拷贝简单深拷贝 浅拷贝 const _shallowClone target > {let copy Array.isArray(target) ? [] : {};for (let key in target) {if (target.hasOwnProperty(key)) {let value target[key];copy[key] value;}}return copy; };在这段代码中&#xff0c;我们定…

docker基本命令(持续更新)

docker基本命令&#xff08;持续更新&#xff09;&#xff1a; 文章目录 docker基本命令&#xff08;持续更新&#xff09;&#xff1a;一、镜像相关二、容器相关&#xff1a;三、dockerfile相关&#xff1a; 注&#xff1a;docker命令需要以root权限使用&#xff08;大概&…

使用Homebrew搭建java环境

Homebrew Homebrew是一款包管理工具,目前支持macOS和linux系统。 默认安装路径为 /usr/local/ 。下载包的安装路径在/usr/local/Cellar/。 #安装 /bin/sh -c "$(curl -fsSL https://gitee.com/cunkai/HomebrewCN/raw/master/Homebrew.sh)" #卸载 /bin/sh -c "…

vue之性能优化

1.路由懒加载 所谓路由懒加载&#xff0c;其实就是路由通过import动态引入&#xff0c;而不是在文件最上面一个个全部引入&#xff0c;因为JS执行的时候会优先执行引入的文件&#xff0c;如果一次性引入过多&#xff0c;则会增加处理时长。 2.图片懒加载 图片在网页加载过程…

Matplotlib接口和常用图形--画图接口

文章目录 任务描述编程要求 任务描述 本关任务&#xff1a;掌握matplotlib的基本使用技巧&#xff0c;并能简单使用matplotlib进行可视化。 相关知识 在深入使用matplotlib之前你需要知道几个matplotlib技巧&#xff0c;这些技巧能帮助你更快速掌握matplotlib。 导入matplot…

svg简单教程

推荐查看这个视频 一小时讲完SVG 简介 scalable 英 /ˈskeɪləbl/ 美 /ˈskeɪləbl/ adj. &#xff08;计算机&#xff09; 可扩展的&#xff1b;可改变大小的&#xff0c;可缩放的&#xff1b;可攀登的&#xff1b;可称量的&#xff1b;可去鳞的 vector 英 /ˈvektə/ 美…

lmbench学习

Ubuntu 手册页&#xff1a; lat_proc - 进程创建测试 编译时参考博客&#xff1a;lmbench基本的部署与使用 结果分析&#xff1a;性能测试工具 Lmbench 的使用方法以及解析运行结果

MIT 6.858 计算机系统安全讲义 2014 秋季(一)

译者&#xff1a;飞龙 协议&#xff1a;CC BY-NC-SA 4.0 MIT 6.858 计算机系统安全笔记 2014 秋季 2014 年由Nickolai Zeldovich 教授和James Mickens 教授教授授课的 6.858 讲座笔记。这些讲座笔记略有修改&#xff0c;与 6.858 课程网站上发布的内容略有不同。 第1讲&#x…

搭建prometheus、grafana监控平台

程序员的公众号&#xff1a;源1024&#xff0c;获取更多资料&#xff0c;无加密无套路&#xff01; 最近整理了一波电子书籍资料&#xff0c;包含《Effective Java中文版 第2版》《深入JAVA虚拟机》&#xff0c;《重构改善既有代码设计》&#xff0c;《MySQL高性能-第3版》&…

php调用guzzlehttp库时出现Segmentation fault的解决方案

先说结论&#xff0c;这个问题的原因是因为php7.4与openssl3不兼容产生的&#xff0c;解决方案如下&#xff1a; 输入openssl version -a查看openssl版本&#xff0c;如果是3以上的版本与php7.4不兼容&#xff0c;7.4以下的没测试过&#xff0c;估计也有问题。我最终是安装上了…

FFmepg--内存IO模式

功能&#xff1a; 内存IO模式&#xff1a;avio_alloc_context(): 自定义读写文件方式&#xff0c;打开文件 api // 自定义IO AVIOContext * avio_alloc_context (unsigend char * buffer;int buffer_size;void *opaque;int (*read_packet)(void * opaque, uint8_t * buf,in…