LSTM参数



input_size:输入维数
hidden_size:输出维数
num_layers:LSTM层数,默认是1
bias:True 或者 False,决定是否使用bias, False则b_h=0. 默认为True
batch_first:True 或者 False,因为nn.lstm()接受的数据输入是(序列长度,batch,输入维数),这和我们cnn输入的方式不太一致,所以使用batch_first,我们可以将输入变成(batch,序列长度,输入维数)
dropout:表示除了最后一层之外都引入一个dropout
bidirectional:表示双向LSTM,也就是序列从左往右算一次,从右往左又算一次,这样就可以两倍的输出


 

输入

 input (seq_len, batch_size, input_size)

– h_0 (num_layers * num_directions, batch_size, hidden_size)

– c_0 (num_layers * num_directions, batch_size, hidden_size)

输出

– output (seq_len, batch_size, num_directions * hidden_size)

 h_n (num_layers * num_directions, batch_size, hidden_size)

– c_n (num_layers * num_directions, batch_size, hidden_size)

 

【注】如果batch_first = True,则output (batch_size, num_directions * hidden_size)

 LSTM参数_二维

 

 

 

LSTM参数_编程_02

上图是LSTM的执行数据流程图,可以看到第$i$层会输出$h_{n}^{(i)}$,所以第一维为num_layers * num_directions,而对于每个批次,有batch_size个样本,每个样本都要输出,所以第二维的维度为batch_size,第三位就是$h$本身的维度大小了,及hidden_size。

$c_n$的维度大小同$h_n$是相同的。

 对于句子中的每个单词,output都有一个输出,所以第一维为seq_len,第二维依然还是batch_size,第三位就是hidden_size,双向的话拼接起来就是2*hidden_size,所以就是num_directions * hidden_size。

由此可以看到当模型为LSTM时,$output[-1,:,:] =  h_n[-1,:,:]$。

 

 

参考:

【1】​​LSTM细节分析理解(pytorch版)​

【2】[深度学习] Pytorch中RNN/LSTM 模型小结