函数介绍

函数描述:通过该函数,用于实现LSTM;
函数声明:

torch.nn.LSTM(self, args, *kwargs);

参数介绍:通常而言,只需要设置如下三个参数即可:

  1. input_size:输入向量的维度
  2. hidden_size:隐藏层状态的维度,即隐藏层节点的个数;
  3. num_layers:LSTM堆叠的层数,默认是1层;

看下图,输入参数就是:[i0, i1, i2, i3, i4],input_size为5;而隐藏层为:[h0. h1. h2, h3, h4],hidden_size=5; image.png
输入数据格式:

  1. input(seq_len, batch, input_size)
  2. h_0(num_layers * num_directions, batch, hidden_size)
  3. c_0(num_layers * num_directions, batch, hidden_size)

对于输入数据,h_0和c_0如果不输入的话,默认做0处理

输出数据格式:

  1. output(seq_len, batch, hidden_size * num_directions)
  2. h_n(num_layers * num_directions, batch, hidden_size)
  3. c_n(num_layers * num_directions, batch, hidden_size)

    使用示例

    这里采用官网提供的实例进行介绍: ```python import torch

import torch.nn as nn # 神经网络模块

rnn = nn.LSTM(10, 20, 2)

输入数据x的向量维数10, 设定lstm隐藏层的特征维度20, 此model用2个lstm层。如果是1,可以省略,默认为1)

input = torch.randn(5, 3, 10)

输入的input为,序列长度seq_len=5, 每次取的minibatch大小,batch_size=3, 数据向量维数=10(仍然为x的维度)。每次运行时取3个含有5个字的句子(且句子中每个字的维度为10进行运行)

初始化的隐藏元和记忆元,通常它们的维度是一样的

2个LSTM层,batch_size=3, 隐藏层的特征维度20

h0 = torch.randn(2, 3, 20)

c0 = torch.randn(2, 3, 20)

这里有2层lstm,output是最后一层lstm的每个词向量对应隐藏层的输出,其与层数无关,只与序列长度相关

hn,cn是所有层最后一个隐藏元和记忆元的输出

output, (hn, cn) = rnn(input, (h0, c0))

模型的三个输入与三个输出。三个输入与输出的理解见上三输入,三输出

print(output.size(),hn.size(),cn.size()) ```

注意事项

参考文章

pytorch的LSTM参数案例及理解
LSTM入门例子:根据前9年的数据预测后3年的客流(PyTorch实现)