引言

今天来分析下Pytorch中RNN输出值中的​​h_n​​​和​​output​​是什么。

正文

Pytorch中RNN输出的h_n和output是什么_Pytorch LSTM

(来自​​stackoverflow nnnmmm的回答​​)

以Pytorch LSTM为例,结构图如上。

(上图没有体现双向的,双向的后面讲)

注意dropout是应用于堆叠层之间的,最后一层时不应用的。

以上图来说,第一层(说的是堆叠的层数,而不是时间步)的隐藏层的输出Pytorch中RNN输出的h_n和output是什么_Pytorch LSTM_02应用dropout后,当成第二层Pytorch中RNN输出的h_n和output是什么_Pytorch LSTM_03的输入。

​nn.LSTM​​构造参数:

Pytorch中RNN输出的h_n和output是什么_Pytorch LSTM_04

必传的参数是前面三个。
输入/输出:

Pytorch中RNN输出的h_n和output是什么_Pytorch LSTM_05

Pytorch文档中关于输出中​​output​​​和​​h_n​​的理解也可以见此图。

Pytorch中RNN输出的h_n和output是什么_Pytorch LSTM

​output​​​包含了堆叠层中每个时间步最后一层的隐藏状态,即上图中的Pytorch中RNN输出的h_n和output是什么_Pytorch LSTM_07(原作者替换了Pytorch中RNN输出的h_n和output是什么_Pytorch LSTM_08Pytorch中RNN输出的h_n和output是什么_Pytorch LSTM_09)。

​h_n​​​ 包含的是最后一个时间步Pytorch中RNN输出的h_n和output是什么_Pytorch LSTM_10每层的隐藏状态。

最后,补充一下双向的描述。

Pytorch中RNN输出的h_n和output是什么_Pytorch LSTM_11

双向RNN相当于两个独立的RNN,一个按从前往后读,另一个从后往前读。这样每个时间步都同时有两个输出,将这两个输出取平均就得到最终的输出。
并且每个最终的输出都是考虑了整个序列的结果,比如Pytorch中RNN输出的h_n和output是什么_Pytorch LSTM_12,正向RNN看了Pytorch中RNN输出的h_n和output是什么_Pytorch LSTM_13,反向RNN看了Pytorch中RNN输出的h_n和output是什么_Pytorch LSTM_14