- 函数介绍
- 使用示例
- 输入数据x的向量维数10, 设定lstm隐藏层的特征维度20, 此model用2个lstm层。如果是1,可以省略,默认为1)
- 输入的input为,序列长度seq_len=5, 每次取的minibatch大小,batch_size=3, 数据向量维数=10(仍然为x的维度)。每次运行时取3个含有5个字的句子(且句子中每个字的维度为10进行运行)
- 初始化的隐藏元和记忆元,通常它们的维度是一样的
- 2个LSTM层,batch_size=3, 隐藏层的特征维度20
- 这里有2层lstm,output是最后一层lstm的每个词向量对应隐藏层的输出,其与层数无关,只与序列长度相关
- hn,cn是所有层最后一个隐藏元和记忆元的输出
函数介绍
函数描述:通过该函数,用于实现LSTM;
函数声明:
torch.nn.LSTM(self, args, *kwargs);
参数介绍:通常而言,只需要设置如下三个参数即可:
- input_size:输入向量的维度
- hidden_size:隐藏层状态的维度,即隐藏层节点的个数;
- num_layers:LSTM堆叠的层数,默认是1层;
看下图,输入参数就是:[i0, i1, i2, i3, i4],input_size为5;而隐藏层为:[h0. h1. h2, h3, h4],hidden_size=5;
输入数据格式:
- input(seq_len, batch, input_size)
- h_0(num_layers * num_directions, batch, hidden_size)
- c_0(num_layers * num_directions, batch, hidden_size)
对于输入数据,h_0和c_0如果不输入的话,默认做0处理
输出数据格式:
- output(seq_len, batch, hidden_size * num_directions)
- h_n(num_layers * num_directions, batch, hidden_size)
- 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()) ```