当前位置:   article > 正文

pytorch笔记:torch.nn.GRU & torch.nn.LSTM

torch.nn.gru

1 函数介绍 (GRU)

        对于输入序列中的每个元素,每一层计算以下函数:

其中h_t是在t时刻的隐藏状态,x_t是在t时刻的输入。σ是sigmoid函数,*是逐元素的哈达玛积

        对于多层GRU 第l层的输入x_t^{(l)}(l≥2)是之前一层的隐藏状态h_t^{(l-1)},乘以dropout \delta_t^{(l-1)}

2 输入参数介绍(GRU)

input_size输入特征的大小
hidden_size隐藏层h特征的大小
num_layers

GRU层数。

        例如,设置 num_layers=2 意味着将两个 GRU 堆叠在一起形成一个堆叠的 GRU,第二个 GRU 接收第一个 GRU 的输出并计算最终结果。

默认值:1

bias

默认值True

上式的那些b是否为0,如果是False的话,那么这些b就都是0

batch_first

如果为 True,则输入和输出Tensor的维度为 (batch, seq, feature) 而不是 (seq, batch, feature)。

默认值:False

dropout

如果非零,则在除最后一层之外的每个 GRU 层的输出上引入一个 Dropout 层,dropout 概率等于 dropout。

默认值:0

bidirectional

如果是True,那么就变成双向GRU

默认值:False

3 使用举例(GRU)

 3.1 输入tensor的维度

          input:当batch_first=False的时候,维度为(seq\_len,batch\_size,input\_size);否则是(batch\_size,seq\_len,input\_size)

        h_0: (num\_directions*num\_layers,batch\_size,hidden\_size)

3.2 输出tensor的维度

        output:当batch_first=False的时候,维度为(seq\_len,batch\_size,hidden\_size * num\_direction);否则是(batch\_size,seq\_len,hidden\_size * num\_direction)

        h_n:(num\_directions*num\_layers,batch\_size,hidden\_size)

3.3 实例说明

  1. import torch
  2. GRU=torch.nn.GRU(input_size=10,
  3. hidden_size=20,
  4. num_layers=20)
  5. input_tensor=torch.randn(5,3,10)
  6. '''
  7. 输入的sequence长5
  8. batch_size为3
  9. 输入sequence每一个元素的维度为10
  10. '''
  11. h0=torch.randn(1*20,3,20)
  12. '''
  13. 第一个参数:单方向GRU(1),20层GRU(20)
  14. 第二个参数:batch_size
  15. 第三个参数:hidden_size的大小
  16. '''
  17. output,hn=GRU(input_tensor,h0)
  18. output.shape,hn.shape
  19. #(torch.Size([5, 3, 20]), torch.Size([20, 3, 20]))

4 torch.nn.LSTM

和GRU几乎完全一模一样,这里说几个不同的地方:

声明的时候,在bidirectional 后面还有一个参数proj_size,默认为0。如果这个参数为0,那么Hc和Hout的维度都是;如果参数大于0,那么Hc仍然是​​​​​​​,Hout变成

 

 

 

​​​​​​​ 

声明:本文内容由网友自发贡献,不代表【wpsshop博客】立场,版权归原作者所有,本站不承担相应法律责任。如您发现有侵权的内容,请联系我们。转载请注明出处:https://www.wpsshop.cn/w/凡人多烦事01/article/detail/327560
推荐阅读
相关标签
  

闽ICP备14008679号