LSTM学习笔记

上一篇文章中我们提到,CRNN模型中用于预测特征序列上下文的模块为双向LSTM模块,本篇中就来针对该模块的结构和实现做一些理解。

Bidirectional LSTM模块结构如下图所示:

在Pytorch中,已经集成了LSTM模块,定义如下:

CLASStorch.nn.LSTM(self, input_size, hidden_size, num_layers=1, bias=True, batch_first=False, dropout=0.0, bidirectional=False, proj_size=0, device=None, dtype=None)

 参数说明:

  • input_size:输入的feature数;
  • hidden_size:隐藏状态h的的feature数;
  • num_layers:递归层的数量。如果num_layers=2,意味着将两个LSTM堆叠在一起,第二个LSTM模块的输入为第一个LSTM的输出,由第二个LSTM输出最终结果。
  • bias:偏置,默认为True,若设为False,则不使用b_ih和b_hh(这两个参数会在下文说明)
  • batch_first:为True时,输入和输出形状为(batch, seq, feature),否则为(seq, batch, feature)。
  • dropout:默认为0。若为非零值,则在每个LSTM层的输出上引入dropout层,dropout概率为设置的dropout值。
  • bidirectional:默认为False。若为True,则为双向LSTM,在CRNN网络中,我们将该参数设置为True。 
  • proj_size:默认为0。若设置为非零值,意味着使用映射大小的size,关于proj_size,pytorch文档中有如下说明:

对于输入序列中的每个元素,每一层需要进行如下计算:

其中,

  • xt​为t时刻的输入;
  • ht是t时刻的隐藏状态,ht-1为t-1时刻的隐藏状态;
  • ct为t时刻的元组状态(cell state);
  • it、ft、gt和ot分别为input gate、forget gate、cell gate、和output gate;
  • σ为sigmoid 函数;
  • ⊙为Hadamard乘积(矩阵点乘)。

对于多层LSTM,输入为上一层的隐含状态,Pytorch文档中对此有较详细的说明:

关于可学习模型参数的说明:

  • weight_ih_l[k]:第k层的input-hidden权重参数(W_ii|W_if|W_ig|W_io),k=0时,形状为(4*hidden_size, input_size) ;k>0时,,若proj_size为0,则权重参数形状为(4*hidden_size, num_directions * hidden_size),若proj_size>0,则权重参数形状为(4*hidden_size, num_directions * proj_size)。
  • weight_hh_l[k]:第k层的hidden-hidden权重参数(W_hi|W_hf|W_hg|W_ho)。若proj_size=0,权重形状:(4*hidden_size, hidden_size);若proj_size>0,则权重形状为(4*hidden_size, proj_size)。
  • bias_ih_l[k]:第k层的input-hidden偏置(b_hi|b_hf|b_hg|b_ho),形状为(4*hidden_size)。
  • bias_hh_l[k]:第k层的hidden-hidden偏置(b_hi|b_hf|b_hg|b_ho),形状为(4*hidden_size)。
  • weight_hr_l[k]:第k层的projection权重,形状为(proj_size, hidden_size),该参数只有在proj_size>0的时候存在。
  • weight_ih_l[k]_reverse:weight_ih_l[k]的反向权重,只在bidirectional=True的时候存在。
  • weight_hh_l[k]_reverse:weight_hh_l[k]的反向权重,只在bidirectional=True的时候存在。
  • bias_ih_l[k]_reverse:bias_ih_l[k]的反向权重,只在bidirectional=True的时候存在。
  • bias_hh_l[k]_reverse:bias_hh_l[k]的反向权重,只在bidirectional=True的时候存在。
  • weight_hr_l[k]_reverse:weight_hr_l[k]的反向权重,只在bidirectional=True的时候存在。

参考资料:LSTM — PyTorch 2.1 documentation

相关推荐

  1. rnn 和lstm源码学习笔记

    2024-01-20 22:46:03       31 阅读

最近更新

  1. docker php8.1+nginx base 镜像 dockerfile 配置

    2024-01-20 22:46:03       98 阅读
  2. Could not load dynamic library ‘cudart64_100.dll‘

    2024-01-20 22:46:03       106 阅读
  3. 在Django里面运行非项目文件

    2024-01-20 22:46:03       87 阅读
  4. Python语言-面向对象

    2024-01-20 22:46:03       96 阅读

热门阅读

  1. SQL中的几个区别

    2024-01-20 22:46:03       50 阅读
  2. Python爬虫实战014:利用requests库实现自动评论

    2024-01-20 22:46:03       59 阅读
  3. stm32 - GPIO高级用法

    2024-01-20 22:46:03       67 阅读
  4. Oracle学习笔记——基础一起学 16

    2024-01-20 22:46:03       53 阅读
  5. python元类模型和class语句协议

    2024-01-20 22:46:03       67 阅读
  6. leetcode-路径总和

    2024-01-20 22:46:03       70 阅读
  7. C语言零基础入门(结构体)

    2024-01-20 22:46:03       54 阅读
  8. 解决Spring Boot应用打包后文件访问问题

    2024-01-20 22:46:03       73 阅读
  9. 多模态是什么意思,在生活工业中有哪些应用?

    2024-01-20 22:46:03       109 阅读
  10. Python Matplotlib 实现基础绘图

    2024-01-20 22:46:03       62 阅读