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

 

图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

  • 12
    点赞
  • 33
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
LSTM循环神经网络(Long Short-Term Memory Recurrent Neural Network)是一种特殊的循环神经网络结构,用于处理时间序列数据。LSTM网络通过引入记忆单元和门控机制,解决了传统循环神经网络中的梯度消失和梯度爆炸问题,并且具有更强的记忆能力。 LSTM网络的核心是记忆单元,记忆单元可以记住和遗忘信息。每个记忆单元由一个细胞状态(cell state)和三个门控单元(输入门、遗忘门和输出门)组成。输入门决定了何时更新细胞状态,遗忘门决定了何时忘记过去的信息,输出门决定了何时输出当前的信息。这些门控单元通过对输入数据的加权求和和激活函数的处理来控制信息的流动。 LSTM网络的另一个重要特点是它可以处理双向序列。这是通过将两个LSTM网络堆叠起来实现的,一个网络从前向后处理输入序列,另一个网络从后向前处理输入序列。这种双向结构可以更好地捕捉序列中的前后依赖关系。 因此,LSTM循环神经网络是一种具有长期记忆能力和门控机制的网络结构,适用于处理时间序列数据,并且可以通过堆叠和双向结构增强其性能。<span class="em">1</span><span class="em">2</span><span class="em">3</span> #### 引用[.reference_title] - *1* *2* *3* [深度学习笔记 9 循环神经网络(RNN、LSTM)](https://blog.csdn.net/qq_41134483/article/details/127415813)[target="_blank" data-report-click={"spm":"1018.2226.3001.9630","extra":{"utm_source":"vip_chatgpt_common_search_pc_result","utm_medium":"distribute.pc_search_result.none-task-cask-2~all~insert_cask~default-1-null.142^v93^chatsearchT3_2"}}] [.reference_item style="max-width: 100%"] [ .reference_list ]

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值