参考pytorch官方文档
https://pytorch.org/docs/master/nn.html#torch.nn.LSTM
|
这里是关键参数介绍
input_size:输入特征的数目
hidden_size:隐层的特征数目
num_layers:这个是模型集成的LSTM的个数 记住这里是模型中有多少个LSTM摞起来 一般默认就1个
bias:用不用偏置 默认是用
batch_first:默认为假 若为真,则输入、输出的tensor的格式为(batch , seq , feature)
即[batch_size, time_step, input_size] 【batch大小,序列长度,特征数目】
dropout:默认0 若非0,则为dropout率
bidirectional:是否为双向LSTM 默认为否
下面仅考虑单项情况
输入格式为lstm(input,(h_0, c_0))
这里面,input为(seq_len, batch, input_size)这里默认batch_first为false,否则前两个换顺序
h_0是格式为(num_layers * num_directions, batch, hidden_size)的tensor 它包含batch中每个元素的最初的隐态
若为双向lstm num_dire…=2 否则=1
c_0是格式为(seq_len, batch, input_size)的tensor 它包含batch中每个元素最初的cell state
若h_0和c_0不提供,则默认为0
输出格式为(output,(h_n,c_n))
output是形状为(seq_len, batch, num_directions*hidden_size)的tensor,包含输出特征h_t(源于LSTM每个t的最后一层)
h_n是形状为(num_layers * num_directions, batch, hidden_size)的tensor, 包含t=seq_len(即序列末尾)的隐态值
c_n是形状为(num_layers * num_directions, batch, hidden_size)的tensor, 包含t=seq_len(即序列末尾)的cell值
rnn = nn.LSTM(10,20,2)#输入向量维数10, 隐藏元维度20, 2个LSTM层串联(若不写则默认为1)
input = torch.randn(5,3,10)#输入(seq_len, batch, input_size) 序列长度为5 batch为3 输入维度为10
h0 = torch.randn(2,3,20)#h_0(num_layers * num_directions, batch, hidden_size) num_layers = 2 ,batch=3 ,hidden_size = 20
c0 = torch.randn(2,3,20)#同上
output, (hn,cn) = rnn(input, (h0,c0))