torch.nn.LSTM()输入API
重要参数
- input_size: 每一个时步(time_step)输入到lstm单元的维度.(实际输入的数据size为
[batch_size, input_size]
) - hidden_size: 确定了隐状态hidden_state的维度. 可以简单的看成: 构造了一个权重 , 隐含状态
- num_layers: 叠加的层数。如图所示num_layers为3
- batch_first: 输入数据的size为
[batch_size, time_step, input_size]
还是[time_step, batch_size, input_size]
LSTM输出API
-
output: 如果num_layer为3,则output只记录最后一层(即,第三层)的输出
- 对应图中向上的各个time_step的ht,也即
output
- 其size根据
batch_first
而不同。可能是[batch_size, time_step, hidden_size]
或[time_step, batch_size, hidden_size]
- 对应图中向上的各个time_step的ht,也即
-
h_n: 各个层的最后一个时步的隐含状态
h
t.- size为
[num_layers,batch_size, hidden_size]
- size为
对应图中向右的ht. 可以看出对于单层单向的LSTM, 其h_n
最后一层输出h_n[-1,:,:]
,和output
最后一个时步的输出output[:,-1,:]
相等。
print(h_n[-1,:,:].equal(output[:,-1,:]))
会打印True
- c_n: 各个层的最后一个时步的隐含状态
C
c_n可以看成另一个隐含状态,size和h_n
相同
代码对比
根据红框可以直观看出,h_n 是最后一个时间步的输出,即是 h_n = output[:, -1, :],如何还是无法直观理解,直接看如下截图,对照代码可以非常容易看出它们的关系
参考文献: