漂亮,LSTM模型结构的可视化

双向 LSTM(Bidirectional LSTM)与普通 LSTM 公式过程 双向 LSTM 结构中有两个 LSTM 层,一个从前向后处理序列,另一个从后向前处理序列。在处理序列时,每个时间步的输入会被分别传递给两个 LSTM 层,然后它们的输出会被合并。双向 LSTM(Bidirectional LSTM)与普通 LSTM 有类似的公式过程,但有一些细微的差别。LSTM 是一种循环神经网络(RNN),用于处理序列数据。通过双向 LSTM,我们可以获得更全面的序列信息,有助于提高模型在序列任务中的性能。是前向 LSTM 在第。个时间步的向量表示,个时间步的细胞状态, 阅读详情

来自 | 知乎  作者 | master苏

链接 | https://zhuanlan.zhihu.com/p/139617364

本文仅作学术交流,如有侵权,请联系后台删除。

最近在学习LSTM应用在时间序列的预测上,但是遇到一个很大的问题就是LSTM在传统BP网络上加上时间步后,其结构就很难理解了,同时其输入输出数据格式也很难理解,网络上有很多介绍LSTM结构的文章,但是都不直观,对初学者是非常不友好的。我也是苦苦冥思很久,看了很多资料和网友分享的LSTM结构图形才明白其中的玄机。

本文内容如下:

1、传统的BP网络和CNN网络
2、LSTM网络
3、LSTM的输入结构
4、pytorch中的LSTM
4.1 pytorch中定义的LSTM模型
4.2 喂给LSTM的数据格式
4.3 LSTM的output格式
5、LSTM和其他网络组合

   传统的BP网络和CNN网络

BP网络和CNN网络没有时间维,和传统的机器学习算法理解起来相差无几,CNN在处理彩色图像的3通道时,也可以理解为叠加多层,图形的三维矩阵当做空间的切片即可理解,写代码的时候照着图形一层层叠加即可。如下图是一个普通的BP网络和CNN网络。

BP网络

CNN网络

图中的隐含层、卷积层、池化层、全连接层等,都是实际存在的,一层层前后叠加,在空间上很好理解,因此在写代码的时候,基本就是看图写代码,比如用keras就是:

# 示例代码,没有实际意义model = Sequential()model.add(Conv2D(32, (3, 3), activation='relu'))  # 添加卷积层model.add(MaxPooling2D(pool_size=(2, 2)))         # 添加池化层model.add(Dropout(0.25))                          # 添加dropout层
model.add(Conv2D(32, (3, 3), activation='relu'))  # 添加卷积层model.add(MaxPooling2D(pool_size=(2, 2)))         # 添加池化层model.add(Dropout(0.25))                          # 添加dropout层
....   # 添加其他卷积操作
model.add(Flatten())                            # 拉平三维数组为2维数组model.add(Dense(256, activation='relu'))        添加普通的全连接层model.add(Dropout(0.5))model.add(Dense(10, activation='softmax'))
....  # 训练网络


   LSTM网络

当我们在网络上搜索看LSTM结构的时候,看最多的是下面这张图:

RNN网络

这是RNN循环神经网络经典的结构图,LSTM只是对隐含层节点A做了改进,整体结构不变,因此本文讨论的也是这个结构的可视化问题。

中间的A节点隐含层,左边是表示只有一层隐含层的LSTM网络,所谓LSTM循环神经网络就是在时间轴上的循环利用,在时间轴上展开后得到右图。

看左图,很多同学以为LSTM是单输入、单输出,只有一个隐含神经元的网络结构,看右图,以为LSTM是多输入、多输出,有多个隐含神经元的网络结构,A的数量就是隐含层节点数量。

WTH?思维转不过来啊。这就是传统网络和空间结构的思维。

实际上,右图中,我们看Xt表示序列,下标t是时间轴,所以,A的数量表示的是时间轴的长度,是同一个神经元在不同时刻的状态(Ht),不是隐含层神经元个数。

我们知道,LSTM网络在训练时会使用上一时刻的信息,加上本次时刻的输入信息来共同训练。

举个简单的例子:在第一天我生病了(初始状态H0),然后吃药(利用输入信息X1训练网络),第二天好转但是没有完全好(H1),再吃药(X2),病情得到好转(H2),如此循环往复知道病情好转。因此,输入Xt是吃药,时间轴T是吃多天的药,隐含层状态是病情状况。因此我还是我,只是不同状态的我。

实际上,LSTM的网络是这样的:

LSTM网络结构

上面的图表示包含2个隐含层的LSTM网络,在T=1时刻看,它是一个普通的BP网络,在T=2时刻看也是一个普通的BP网络,只是沿时间轴展开后,T=1训练的隐含层信息H,C会被传递到下一个时刻T=2,如下图所示。上图中向右的五个常常的箭头,所的也是隐含层状态在时间轴上的传递。

注意,图中H表示隐藏层状态,C是遗忘门,后面会讲解它们的维度。

   LSTM的输入结构

为了更好理解LSTM结构,还必须理解LSTM的数据输入情况。仿照3通道图像的样子,在加上时间轴后的多样本的多特征的不同时刻的数据立方体如下图所示:

三维数据立方体

右边的图是我们常见模型的输入,比如XGBOOST,lightGBM,决策树等模型,输入的数据格式都是这种(N*F)的矩阵,而左边是加上时间轴后的数据立方体,也就是时间轴上的切片,它的维度是(N*T*F),第一维度是样本数,第二维度是时间,第三维度是特征数,如下图所示:

这样的数据立方体很多,比如天气预报数据,把样本理解成城市,时间轴是日期,特征是天气相关的降雨风速PM2.5等,这个数据立方体就很好理解了。在NLP里面,一句话会被embedding成一个矩阵,词与词的顺序是时间轴T,索引多个句子的embedding三维矩阵如下图所示:

   pytorch中的LSTM

4.1 pytorch中定义的LSTM模型

pytorch中定义的LSTM模型的参数如下

class torch.nn.LSTM(*args, **kwargs)参数有:    input_size:x的特征维度    hidden_size:隐藏层的特征维度    num_layers:lstm隐层的层数,默认为1    bias:False则bihbih=0和bhhbhh=0. 默认为True    batch_first:True则输入输出的数据格式为 (batch, seq, feature)    dropout:除最后一层,每一层的输出都进行dropout,默认为: 0    bidirectional:True则为双向lstm默认为False

结合前面的图形,我们一个个看。

(1)input_size:x的特征维度,就是数据立方体中的F,在NLP中就是一个词被embedding后的向量长度,如下图所示:

(2)hidden_size:隐藏层的特征维度(隐藏层神经元个数),如下图所示,我们有两个隐含层,每个隐藏层的特征维度都是5。注意,非双向LSTM的输出维度等于隐藏层的特征维度。

(3)num_layers:lstm隐层的层数,上面的图我们定义了2个隐藏层。

(4)batch_first:用于定义输入输出维度,后面再讲。

(5)bidirectional:是否是双向循环神经网络,如下图是一个双向循环神经网络,因此在使用双向LSTM的时候我需要特别注意,正向传播的时候有(Ht, Ct),反向传播也有(Ht', Ct'),前面我们说了非双向LSTM的输出维度等于隐藏层的特征维度,而双向LSTM的输出维度是隐含层特征数*2,而且H,C的维度是时间轴长度*2。


4.2 喂给LSTM的数据格式

pytorch中LSTM的输入数据格式默认如下:

input(seq_len, batch, input_size)参数有:    seq_len:序列长度,在NLP中就是句子长度,一般都会用pad_sequence补齐长度    batch:每次喂给网络的数据条数,在NLP中就是一次喂给网络多少个句子    input_size:特征维度,和前面定义网络结构的input_size一致。

前面也说到,如果LSTM的参数 batch_first=True,则要求输入的格式是:

input(batch, seq_len, input_size)

刚好调换前面两个参数的位置。其实这是比较好理解的数据形式,下面以NLP中的embedding向量说明如何构造LSTM的输入。

之前我们的embedding矩阵如下图:

如果把batch放在第一位,则三维矩阵的形式如下:

其转换过程如下图所示:

看懂了吗,这就是输入数据的格式,是不是很简单。

LSTM的另外两个输入是 h0 和 c0,可以理解成网络的初始化参数,用随机数生成即可。

h0(num_layers * num_directions, batch, hidden_size)c0(num_layers * num_directions, batch, hidden_size)参数:    num_layers:隐藏层数    num_directions:如果是单向循环网络,则num_directions=1,双向则num_directions=2    batch:输入数据的batch    hidden_size:隐藏层神经元个数

注意,如果我们定义的input格式是:

input(batch, seq_len, input_size)

则H和C的格式也是要变的:

h0(batc,num_layers * num_directions, h, hidden_size)c0(batc,num_layers * num_directions, h, hidden_size)


4.3 LSTM的output格式

LSTM的输出是一个tuple,如下:

output,(ht, ct) = net(input)    output: 最后一个状态的隐藏层的神经元输出    ht:最后一个状态的隐含层的状态值    ct:最后一个状态的隐含层的遗忘门值

output的默认维度是:

output(seq_len, batch, hidden_size * num_directions)ht(num_layers * num_directions, batch, hidden_size)ct(num_layers * num_directions, batch, hidden_size)

和input的情况类似,如果我们前面定义的input格式是:

input(batch, seq_len, input_size)

则ht和ct的格式也是要变的:

ht(batc,num_layers * num_directions, h, hidden_size)ct(batc,num_layers * num_directions, h, hidden_size)

说了这么多,我们回过头来看看ht和ct在哪里,请看下图:

output在哪里?请看下图:

   LSTM和其他网络组合

还记得吗,output的维度等于隐藏层神经元的个数,即hidden_size,在一些时间序列的预测中,会在output后,接上一个全连接层,全连接层的输入维度等于LSTM的hidden_size,之后的网络处理就和BP网络相同了,如下图:

用pytorch实现上面的结构:

import torchfrom torch import nn
class RegLSTM(nn.Module):    def __init__(self):        super(RegLSTM, self).__init__()        # 定义LSTM        self.rnn = nn.LSTM(input_size, hidden_size, hidden_num_layers)        # 定义回归层网络,输入的特征维度等于LSTM的输出,输出维度为1        self.reg = nn.Sequential(            nn.Linear(hidden_size, 1)        )
    def forward(self, x):        x, (ht,ct) = self.rnn(x)        seq_len, batch_size, hidden_size= x.shape        x = y.view(-1, hidden_size)        x = self.reg(x)        x = x.view(seq_len, batch_size, -1)        return x

当然,有些模型则是将输出当做另一个LSTM的输入,或者使用隐藏层ht,ct的信息进行建模,不一而足。

好了,以上就是我对LSTM的一些学习心得,看完记得关注点赞。

参考链接:

https://zhuanlan.zhihu.com/p/94757947

https://zhuanlan.zhihu.com/p/59862381

https://zhuanlan.zhihu.com/p/36455374

https://www.zhihu.com/question/41949741/answer/318771336

https://blog.youkuaiyun.com/android_ruben/article/details/80206792

-结束-

lstm结构图_人人都能看懂的LSTM介绍及反向传播算法推导(非常详细) 1.长短期记忆网络LSTMLSTM(Long short-term memory)通过刻意的设计来避免长期依赖问题,是一种特殊的RNN。长时间记住信息实际上是 LSTM 的默认行为,而不是需要努力学习的东西!所有递归神经网络都具有神经网络的链式重复模块。在标准的RNN中,这个重复模块具有非常简单的结构,例如只有单个tanh层,如下图所示。图1 RNN结构图LSTM具有同样的结构,但是重复的模块拥有... 阅读详情

相关推荐

LSTM网络系列总结

在之前的博客中讨论了 4 期不同的 LSTM 网络结构,并给出了相关的代码和网络运行结果,本期将总结这些网络的结构和特性

qq_48717745的博客 1415

【LSTM】深入浅出讲解长短时记忆神经网络(结构、原理)

1、LSTM的背景介绍 长短时记忆神经网络(Long Short-term Memory Networks,简称LSTM)是特殊的RNN,尤其适合顺序序列数据的处理,LSTM 由 Hochreiter & Schmidhuber (1997) 提出,并在近期被 Alex Graves 进行了改良和推广,LSTM明确旨在避免长期依赖性问题,成功地解决了原始循环神经网络的缺陷,成为当前最流行的RNN,在语音识别、图片描述、自然语言处理等许多领域中成功应用。 2、RNN的不足 图...

程序星空实验室 5万+

Bidirectional Long ShortTerm Memory (LSTM) Architecture

作者:禅与计算机程序设计艺术 1.简介 文本分类(text classification)是自然语言处理中的一个重要任务。给定一段文字,需要自动地对其进行分类,即将该段文字划入某一类或多类。这一过程是用计算机或机器学习模型实现的,并涉及到对文本表示、文本特征提取、机器学习方法等方面的一些技术。其中,神经

AI天才研究院 2281

lstm结构图_LSTM模型结构的可视化

目录: 1、传统的BP网络和CNN网络 2、LSTM网络 3、LSTM的输入结构 4、pytorch中的LSTM 4.1 pytorch中定义的LSTM模型 4.2 喂给LSTM的数据格式 4.3 LSTM的output格式 5、LSTM和其他网络组合最近在学习LSTM应用在时间序列的预测上,但是遇到一个很大的问题就是LSTM在传统BP网络上加上时间步后,其结构就很难理解了,同时其输入输出数据格式...

weixin_39529463的博客 8299

LSTM空气质量预测与可视化分析:Python实战教程

时间序列预测是环境监测数据挖掘中的重要任务,LSTM因其对长程依赖的建模能力,成为处理PM2.5等污染物浓度预测的常用深度学习模型。本文基于Python与PyTorch,系统梳理了从原始监测CSV到LSTM训练样本的数据清洗、滑动窗口构造、MinMaxScaler防泄漏标准化等完整流程,并给出模型结构、训练参数与早停策略。通过RMSE、MAE、误差分布和按小时箱线图等可视化手段,可定位预测滞后与系统性偏差。文章还总结了缺失值处理、信息泄漏、MAPE分母爆炸等常见工程陷阱。适用于空气质量预测、传感器时序建模及

weixin_30694389的博客 315

基于LSTM的气温预测可视化:Python源码与期末大作业实战

时间序列预测是机器学习与数据分析领域的重要分支,其核心目标是从历史观测数据中挖掘时间依赖规律,进而推断未来趋势。在众多建模方法中,循环神经网络(RNN)及其变体长短期记忆网络(LSTM)凭借出色的序列建模能力,成为处理气温、股价、流量等时序数据的常用技术。LSTM通过门控机制有效缓解了长期依赖问题,能够捕捉数据中的季节性和趋势性特征,因此被广泛应用于气象预报、能源负荷预测等场景。对于高校学生而言,基于LSTM的气温预测项目不仅能够帮助理解深度学习原理,还能完整实践数据预处理、模型构建、训练评估与可视化呈现的

weixin_29031057的博客 181

【深度学习】漂亮,LSTM模型结构的可视化

本文约3200字,建议阅读5分钟。本文介绍了LSTM模型结构的可视化。最近在学习LSTM应用在时间序列的预测上,但是遇到一个很大的问题就是LSTM在传统BP网络上加上时间步后,其结构就很难理解了,同时其输入输出数据格式也很难理解,网络上有很多介绍LSTM结构的文章,但是都不直观,对初学者是非常不友好的。我也是苦苦冥思很久,看了很多资料和网友分享的LSTM结构图形才明白其中的玄机。本文内容如下:1、...

fengdu78的博客 2万+

LSTM气温预测实战:从数据预处理到模型可视化

时间序列预测是机器学习的重要应用领域,在气象、能源、交通等场景中广泛存在。长短期记忆网络(LSTM)通过门控机制有效捕捉序列数据中的长期依赖关系,成为处理时间序列问题的经典模型。相比传统统计方法,LSTM能够自动学习复杂时序特征,适用于气温、电力负荷等多变量连续预测任务。在实际工程中,数据预处理往往决定模型上限,归一化、滑窗构造、训练集与验证集的时间划分等细节直接影响预测效果;而模型训练中的过拟合、滞后现象和误差分析也是评估模型可靠性、优化模型结构的关键环节。本文围绕气温预测这一典型场景,从数据清洗、归一化

weixin_29062671的博客 147

lstm模型_漂亮,LSTM模型结构的可视化

来自 | 知乎 作者 | master苏链接 | https://zhuanlan.zhihu.com/p/139617364本文仅作学术交流,如有侵权,请联系后台删除。最近在学习LSTM应用在时间序列的预测上,但是遇到一个很大的问题就是LSTM在传统BP网络上加上时间步后,其结构就很难理解了,同时其输入输出数据格式也很难理解,网络上有很多介绍LSTM结构的文章,但是都不直观,对初学者...

weixin_39520880的博客 1882

基于Spark与LSTM的电商用户行为分析预测与可视化系统

用户行为分析是大数据与人工智能交叉领域的核心课题,通过采集用户浏览、收藏、加购、购买等行为日志,可以挖掘用户的潜在意图与商品偏好。在工程实践中,分布式计算框架Spark承担海量行为数据的清洗与特征工程,深度学习模型如LSTM则用于捕捉行为序列中的时序依赖,从而预测用户下一步的购买倾向。这一技术链路不仅支撑个性化推荐、精准营销等常见电商场景,也为业务决策提供了数据驱动的可视化依据。结合Django搭建的可视化平台,将用户画像、商品热度、转化漏斗等指标以图表形式呈现,让复杂的数据规律变得直观可读。本文围绕电商用

weixin_34067102的博客 328

卡尔曼滤波结合LSTM的时间序列预测:MATLAB实战指南

时间序列预测中,原始观测数据常混有噪声,直接使用深度学习模型易被随机波动干扰,导致预测精度下降。卡尔曼滤波作为一种经典的状态估计算法,能够在线性高斯系统下有效平滑噪声、提取真实信号,但其对非线性模式的建模能力有限。长短期记忆网络(LSTM)擅长捕捉长期依赖和非线性趋势,却对输入信号质量敏感。将两者组合,先通过卡尔曼滤波对观测序列进行预处理,再将干净的信号输入LSTM进行多步预测,可显著提升模型的泛化能力。这一方法适用于传感器振动分析、股票价格预测、温度趋势估计等多种工程与科研场景。本文基于MATLAB平台,

weixin_31421613的博客 519

模型结构可视化神器——Netron(支持tf, caffe, keras,mxnet等多种框架)

很多时候,复现人家工程的时候,需要了解人家的网络结构。但不同框架之间可视化网络层方法不一样,这样给研究人员造成了很大的困扰。 前段时间,发现了一个可视化模型结构的神奇:Netron 目前的Netron支持主流各种框架的模型结构可视化工作,我直接给出gayhub链接: https://github.com...

一新新的小白的博客 1367

DC综合中set_dft_signal的实战配置与优化策略

本文深入解析了DC综合中set_dft_signal命令的实战配置与优化策略。文章从命令的核心作用出发,详细拆解了-view、-type、-usage等关键参数,并通过扫描使能与时钟门控的实战案例,展示了如何正确配置以实现测试模式下的功耗优化。同时,文章总结了高级优化策略、与低功耗流程的协同方法以及常见错误排查清单,旨在帮助数字芯片设计工程师构建高可测性、低功耗的稳健DFT基础。

weixin_28347369的博客 405

基于机器学习 LSTM 算法的豆瓣评论情感分析系统

基于机器学习 LSTM 算法的豆瓣评论情感分析系统,该系统在原本的基础之上进行优化。支持了机器学习 lstm 算法,进行情感分析支持了用户手动输入文本进行情感分析咱们这套系统是用 Python + Flask 搭的,用 LSTM(长短期记忆网络)模型来做豆瓣影评的情感分析。它能自动爬取豆瓣上的最新评论,给你算出好评率、差评率,还能把分析结果实时可视化,支持饼图、条形图等多种图表展示。整个项目含源码、开发环境配置、安装教程,功能完整,特别适合拿去做毕业设计、课程设计或数据库大作业。爬虫模块。

程序员徐师兄的博客 2025

AI大模型驱动的智能座舱研发体系重构

AI大模型正重构智能座舱研发体系的核心逻辑,需以场景认知为起点、混合架构为支柱、AI原生生态为落脚点。未来,研发体系需持续融合认知科学、边缘计算与开放生态理论,推动座舱从“工具”进化为“伙伴”。

我的专栏 1917

别再到处找模板了!我用这套软著申请材料(含用户手册+源代码模板)两个月搞定

本文提供了一套高效的软著申请材料模板,包括用户手册和源代码模板,帮助开发者两个月内快速完成申请。通过实战指南和常见误区解析,详细介绍了材料准备的规范与技巧,确保格式合规性,大幅提升审核通过率。

weixin_29268637的博客 549

Python 基于深度学习的电影评论可视化系统

基于机器学习 LSTM 算法的豆瓣评论情感分析系统,该系统在原本的基础之上进行优化。支持了机器学习 lstm 算法,进行情感分析支持了用户手动输入文本进行情感分析咱们这套系统是用 Python + Flask 搭的,用 LSTM(长短期记忆网络)模型来做豆瓣影评的情感分析。它能自动爬取豆瓣上的最新评论,给你算出好评率、差评率,还能把分析结果实时可视化,支持饼图、条形图等多种图表展示。整个项目含源码、开发环境配置、安装教程,功能完整,特别适合拿去做毕业设计、课程设计或数据库大作业。爬虫模块。

程序员徐师兄的博客 1334

几率大的Redis面试题(含答案)

本文的面试题如下: Redis 持久化机制 缓存雪崩、缓存穿透、缓存预热、缓存更新、缓存降级等问题 热点数据和冷数据是什么 Memcache与Redis的区别都有哪些? 单线程的redis为什么这么快 redis的数据类型,以及每种数据类型的使用场景,Redis 内部结构 redis的过期策略以及内存淘汰机制【~】 Redis 为什么是单线程的,优点 如何解决redis的并发竞争key问题 Red...

睶 38万+

LSTM神经网络和SVR的理解和实现(Python+R)——学习记录

学习记录!

weixin_45626690的博客 527

用Blender给ArduPilot无人船编队设计灯光秀:从建模到飞行的保姆级教程

本文详细介绍了如何利用Blender和ArduPilot为无人船编队设计灯光秀的全流程技术方案。从3D动画设计、坐标转换、数据导出到ArduPilot飞控配置和灯光控制,提供了一套完整的保姆级教程,帮助开发者实现水面灯光编队表演。

weixin_29213525的博客 387

全网详细解决:无法将 “xxx” 项识别为 cmdlet、函数、脚本文件或可运行程序的名称。请检查名称的拼写,如果包括路径,请确保路径正确,然后再试一次

全网详细解决:无法将 “xxx” 项识别为 cmdlet、函数、脚本文件或可运行程序的名称。请检查名称的拼写,如果包括路径,请确保路径正确,然后再试一次。

念兮为美 5万+
上一篇: 图像处理之目标检测入门总结
下一篇: 再见,Matplotlib!
机器学习算法那些事
博客等级 码龄9年 1633粉丝 62原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

当前余额3.43元 前往充值 >
需支付:10.00元
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付元
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值