torch.nn.LSTM()详解
输入的参数列表包括:
input_size
输入数据的特征维数,通常就是embedding_dim
(词向量的维度)hidden_size
LSTM中隐层的维度,bidirectional
=True时,hidden_size
减半num_layers
循环神经网络的层数bias
用不用偏置,default=Truebatch_first
这个要注意,通常我们输入的数据shape=(batch_size
,seq_length
,embedding_dim
),而batch_first
默认是False,所以我们的输入数据最好送进LSTM之前将batch_size
与seq_length
这两个维度调换dropout
默认是0,代表不用dropoutbidirectional
默认是false,代表不用双向LSTM
输入数据包括input,(h_0,c_0):
input
就是shape=(seq_length
,batch_size
,input_size
)的张量h_0
是shape=(num_layers
*num_directions
,batch_size
,hidden_size
)的张量,它包含了在当前这个batch_size中每个句子的初始隐藏状态。其中num_layers就是LSTM的层数。如果bidirectional
=True, num_directions=2,否则就是1,表示只有一个方向。如果bidirectional
=True,hidden_size
//2c_0
和h_0
的形状相同,它包含的是在当前这个batch_size中的每个句子的初始细胞状态。h_0
,c_0
如果不提供,那么默认是0。
输出数据包括output,(h_n, c_n):
output
的shape=(seq_length
,batch_size
,num_directions
*hidden_size
),
它包含的是LSTM的最后一时间步的输出特征(h_t),t是batch_size中每个句子的长度。h_n.shape
==(num_directions * num_layers, batch, hidden_size)c_n.shape
==h_n.shape
- h_n包含的是句子的最后一个单词(也就是最后一个时间步)的隐藏状态,c_n包含的是句子的最后一个单词的细胞状态,所以 它们都与句子的长度seq_length无关。
output[-1]
与h_n
是相等的,(只有当bidirectional
=False时才相等,否则output[-1]
是h_n
拼接起来的),因为output[-1]
包含的正是batch_size
个句子中每一个句子的最后一个单词的隐藏状态,注意LSTM中的隐藏状态其实就是输出,cell state细胞状态才是LSTM中一直隐藏的,记录着信息
1 | import torch |
参考资料
All articles in this blog are licensed under CC BY-NC-SA 4.0 unless stating additionally.
Comment