【LSTM】LSTM网络及参数学习笔记

news2024/10/7 8:26:37

 

图1 LSTM模型结构可视化 [6].
图2 LSTM cell结构说明
图3 LSTM cell和num_units说明 [4].
图4 LSTM的网络结构
1. LSTM
  • 是对一个LSTM层的抽象,可以看成是由多个LSTM cell组成,是包含时间步的一个网络
2. LSTM cell
  • 图2是LSTM在时间步上的结构,结合图3来理解LSTM cell的概念
  • 在时间步上cell_1->cell_2->cell_3->…只是一个cell在不同时刻的表现
  • 也就是说LSTM cell是某一时刻包含多个隐藏层神经元的结构
3. num_layers
  • 模型层数(隐藏层)

  • LSTM隐藏层/循环层的层数。如图1的隐藏层1和隐藏层2所示

  • LSTM结构的个数,即多少个LSTM结构的堆叠。如图2的layer1和layer2所示

  • num_layers默认是1,可以设置1~10

  • 整个LSTM网络就是: input -> LSTM结构 * n -> output

  • num_layers = hidden_num_layers

4. feature_size
  • 输入x的特征数,number of features in the input x
  • feature_size = input_size
5. input_size
  • 输入维度,输入x的特征数
  • input_size = feature_size
6. hidden_size
  • 隐藏层中隐藏神经元的个数,如图1和图3中所示
  • 隐藏层的特征维度,有多少个隐藏神经元就有多少个输出
  • 每个隐藏层隐藏节点/神经元个数可以不一样
7. num_units
  • 隐藏层神经元的个数,见图3所示
  • num_units = hidden_size
8. output_layer
  • 这里指的是还没有加入全连接层或者softmax等层

  • LSTM的输出是一个tuple元组

  • output后如果要接全连接层,那么全连接层的输入维度 = hidden_size

9. time_step
  • 时间步,即时间序列长度,见图1和图2中x_t的长度
  • number of frames, 帧数
  • time_step = sequence_length = 帧数
10. node_num
  • 图1中T=4,节点数为4
  • RNN/LSTM节点数node_num = 序列长度 = time_step = 帧数
11. seq_len
  • 从实际应用来理解,seq_len指时间序列的长度,目标的历史帧数
  • seq_len = 帧数 = time_step
12. num_directions
  • 1 - 单向LSTM
  • 2 - 双向LSTM
13. h_t, c_t
  • h是隐藏状态,表示短期记忆

  • c是细胞状态,表示长期记忆

  • h_t: t时刻的隐藏状态hidden state, h_n就是最后一个隐藏神经元的hidden state

  • c_t: t时刻的细胞状态cell state, c_n就是最后一个隐藏神经元的cell state

  • h_n/c_n的值和序列长度seq_len无关,和num_layers有关

14. output_size
  • 输出维度
  • 和隐藏层数num_layers无关,和序列长度seq_len和隐藏神经元的个数hidden_size有关
15. batch_size
  • batch: 每次载入一批数据叫一个batch
  • batch_size: 一批数据有多少个样本,比如batch_size = 32表示一次载入32个数据
  • batch_size: how many samples per batch to load
16. batch_first
  • data_loader的时候没有这个参数,模型定义的时候有这个参数

  • batch_first:数据组织的方式

    • batch_first = true:数据batch优先,也就是逐个目标序列的方式存储,如[[a_t1, a_t2, a_t3], [b_t1, b_t2, b_t3]]
    • batch_first = false:数据seq_len优先,也就是逐个时刻各个目标的方式存储,如[[a_t1, b_t1, c_t1], [a_t2_b_t2, c_t2], [a_t3, b_t3, c_t3]]
  • batch_first默认是false,pytorch的LSTM默认输入和输出都是batch_size在第二维,也就是优先按seq_len时间顺序排列数据,如下

  • batch_first默认为false是因为cudnn中rnn的api就是batch_size在第二维度,这也导致batch_first设置为true后训练速度可能会变慢

  • 【batch_first = true】

    input(batch, seq_len, input_size)
    output(batch_size, seq_len, hidden_size * num_directions)
    h0(num_layers * num_directions, batch_size, hidden_size)
    c0(num_layers * num_directions, batch_size, hidden_size)
    hn(num_layers * num_directions, batch_size, hidden_size)
    cn(num_layers * num_directions, batch_size, hidden_size)
    
  • 【batch_first = false】

    input(seq_len, batch, input_size)
    output(seq_len, batch_size, hidden_size * num_directions)
    h0(num_layers * num_directions, batch_size, hidden_size)
    c0(num_layers * num_directions, batch_size, hidden_size)
    hn(num_layers * num_directions, batch_size, hidden_size)
    cn(num_layers * num_directions, batch_size, hidden_size)
    
  • 从上面可以看出,batch_first影响input/output的数据格式,但是对h_t/c_t的格式却没有影响,可以实际打印shape看下

  • batch_first不同取值影响到如何寻址访问对应的数据,使用时需注意

 


【参考文章】
[1].batch_first参数
[2].batch_first参数的理解
[3].batch_first参数的理解
[4].LSTM架构详解
[5].LSTM"门"的原理解析
[6].LSTM模型结构可视化, 推荐
[7].RNN参数解释
[8].LSTM参数
[9].LSTM参数
[10].hidden_size的理解
[11].理解LSTM英文版

created by shuaixio, 2024.05.09

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

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

相关文章

「51媒体」教育论坛会议媒体邀约的资源有哪些

传媒如春雨,润物细无声,大家好,我是51媒体网胡老师。 中国拥有众多教育方面的媒体资源,这些媒体在邀约时可以用于宣传和推广教育活动、论坛或项目。以下是一些具体的教育媒体邀约资源: 报纸类媒体: 《中…

STM32实现1.8寸液晶屏 LCD SPI串口显示屏模块 TFT彩屏(标准库和HAL库实现)

目录 一、所选模块 液晶模块选择(淘宝上均有售卖) 模块引脚 二、嵌入式单片机型号 三、接线表设计 四、开发环境版本说明 五、标准库实现 六、HAL库实现 七、完整工程(内含标准库和HAL库源码) 代码链接 一、所选模块 液…

OpenSSL实现AES的ECB和CBC加解密,可一次性加解密任意长度的明文字符串或字节流(QT C++环境)

本篇博文讲述如何在Qt C的环境中使用OpenSSL实现AES-ECB/CBC-Pkcs7加/解密,可以一次性加解密一个任意长度的明文字符串或者字节流,但不适合分段读取加解密的(例如,一个4GB的大型文件需要加解密,要分段读取,…

Android system property运作流程源码分析

一.序 前文分析了build.prop这个系统属性文件的生成,每个属性都有一个名称和值,他们都是字符串格式。属性被大量使用在Android系统中,用来记录系统设置或进程之间的信息交换。属性是在整个系统中全局可见的。每个进程可以get/set属性&#x…

【ITK配准】第十六期 2D中BSpline可变形多分辨率配准样例

很高兴在雪易的CSDN遇见你 VTK技术爱好者 QQ:870202403 公众号:VTK忠粉 前言 本文分享ITK配准中的2D中BSpline可变形多分辨率配准,希望对各位小伙伴有所帮助! 感谢各位小伙伴的点赞+关注,小易会继续努力分享,一起进步! 你的点赞就是我的动力(^U^)ノ~YO 2…

文件摆渡系统与传统文件交换有什么区别|好用的文件摆渡系统分享

一、文件摆渡系统与传统文件交换方式的区别 文件摆渡系统与传统文件交换方式在多个方面存在显著的区别。随着信息化和网络化的发展,文件交换的方式也在不断演进,从传统的物理介质交换到现代化的网络交换,文件摆渡系统作为其中的一种重要方式…

PT:pt write_change to innovus 脚本

我正在「拾陆楼」和朋友们讨论有趣的话题&#xff0c;你⼀起来吧&#xff1f; 拾陆楼知识星球入口 #!usr/bin/perl open rf,"$ARGV[0]"; open wf,">test. tcl"; while (<rf>) { s/\[(\D[^\s\]]*)?\]/\\\[$1\\\]/g; if (/c…

CountDownLatch应用场景代码练习

目录 概念原理核心参数和方法两种应用场景实现代码应用一&#xff1a;让 主任务 等待 所有子任务执行完毕后&#xff0c;再继续执行执行结果应用二&#xff1a;让所有子任务同时执行&#xff0c;打印出发时间执行结果应用二&#xff08;扩展&#xff09;&#xff1a;让所有子任…

React:Router-2. createBrowserRouter函数式

参考文档&#xff1a;ReactRouter官网 前边的文章 BrowserRouter组件式路由 提供了组件式路由的方式&#xff0c;在react-router6.4.0及以上版本&#xff0c;提供了 createBrowserRouter 函数式路由创建方式。 一、创建路由 1. 新建router.js文件&#xff0c;使用createBrow…

WPF容器控件之dockpanel、布局控件

dockpanel 容器控件&#xff0c;对其子元素进行或者水平垂直排布&#xff0c;也可以叫停靠面板,也可以让子元素停靠到容器某一个边上&#xff0c;拉伸元素拾起充满全部的高度或者宽度&#xff0c;也可以使最后一个子元素是否铺满剩余的空间。 参数 LastChildFill最后一个子元素…

引用数据类型 栈内存 堆内存

let m { a: 10, b: 20 }; let n m; n.a 15; console.log(m.a) // 15 原因&#xff1a;基本数据类型存储在栈内存中&#xff0c;引用数据类型存储在堆内存中 &#xff0c;引用数据类型存储在堆内存中会在栈内存中创建一个指针&#xff0c;栈内存中的这个指针指向堆内存中的地…

二.Django--创建多个APP路由映射

目录 1-创建项目 2-创建多个APP 3-注册APP 4-创建"前端页面"并做路由映射 各个APP里面的views.py写视图函数等等 1-创建项目 django-admin startproject 项目名 django-admin startproject my_project 2-创建多个APP python manage.py startapp app名 pyth…

遥控挖掘机之ESP8266调试心得(1)

ESP8266调试心得 1. 前言2.遇到的问题2.1 ESP8266模块建立TCP连接时候报错2.2 指令异常问题 3. 更新ESP8266固件3. ESP8266的部分AT指令3. 连接步骤3.1 模块与电脑连接3.2.1 电脑上的设置3.2.2 ESP8266模块作为客户机&#xff08;TCP Cilent&#xff09;的设置步骤 3.2 模块与模…

云计算:数据时代的魔法城堡

云端初探&#xff1a;定义与起源 想象一下&#xff0c;有一个巨大的、无形的仓库&#xff0c;里面存放着全世界的信息与计算能力&#xff0c;你可以随时随地按需提取&#xff0c;无需关心它的物理位置或维护细节。这就是云计算——一种基于互联网的计算方式&#xff0c;它通过…

Hive UDTF之explode函数、Lateral View侧视图

Hive UDTF之explode函数 Hive 中的 explode() 函数是一种用于处理数组类型数据的 User-Defined Table-Generating Function (UDTF)。它将数组拆分成多行&#xff0c;每个数组元素对应生成的一行数据。这在处理嵌套数据结构时非常有用&#xff0c;例如处理 JSON 格式的数据。 …

CentOS 自建gitlab仓库:安装相关工具

所需环境 Node 安装项目依赖、项目打包运行Nginx 前端项目部署&#xff08;正向代理、反向代理、负载均衡等&#xff09;Git 自动化部署时 拉取代码使用GitLab 代码仓库GitLab-Runner GitLab的CI/CD执行器 一、安装Node 检测是否已安装 常用node -v 命令检测。 如果已安装&a…

web前端学习笔记9

9. HTML5新增元素及属性 9.1 HTML5新增结构元素 HTML5引入了几个新的结构元素,极大地改善了网页的组织和结构方式。以下是HTML5中的一些关键新结构元素: 标签说明<header>页面或页面中某一个区块的页眉,通常是一些引导和导航信息<nav>可以作为页面导航的链接组&…

C# WinForm —— 12 ListBox绑定数据

ListBox加载大量数据时&#xff0c;避免窗体闪烁的方法&#xff1a; 在加载语句的前后分别加上 BeginUpdate()方法 和 EndUpdate()方法 指定一个集合为绑定的数据源 1. 首先&#xff0c;右键项目&#xff0c;添加类 2. 在新建的类文件中添加属性值信息 3. 构建初始化的对象…

算法设计课第五周(贪心法实现活动选择问题)

目录 一、【实验目的】 二、【实验内容】 三、实验源代码 一、【实验目的】 &#xff08;1&#xff09;熟悉贪心法的设计思想 &#xff08;2&#xff09;理解贪心法的最优解与正确性证明之间的关系 &#xff08;3&#xff09;比较活动选择的各种“贪心”策略&#xff0c;…

CSP-j 2022csp-j完善程序易错题

易错题 答案23&#xff1a; 对 解析23&#xff1a; 函数 g 就是把函数 f 改成递推的形式 答案24&#xff1a; 对 解析23&#xff1a; 无。 答案25&#xff1a; C 解析25&#xff1a; m n ( m - 1 ) * ( 1 2 3 4 ... n ) O(mn^2) 答案26&#xff1a; C 解析26&#x…