其實構建rnn的代碼十分簡單,但是實際上看了下csdn以及官方tutorial的解釋都不是很詳細,說的意思也不能夠讓人理解,讓大家可能會造成一定誤解,因此這裏對rnn的參數做一個詳細的解釋:
self.encoder = nn.RNN(input_size=300,hidden_size=128,dropout=0.5)
在這句代碼當中:
- input_size:表示輸入句子但當中單詞的維度,比如你將一個單詞編碼爲100維度的one-hot 向量,那麼這裏應該使用input_size=100
- hidden_size:表示每一個rnn神經單位向量(每一個隱匿層)的向量長度,多個rnn神經網絡隱匿層就形成了我們的rnn
- dropout:dropout的概率大小
- num_layers:有多少層rnn的網絡,往上堆疊多少層rnn
以上是對rnn結構的構建,之後我們來進行對rnn前向轉播:
output,hn = self.encoder(encoder_input,encoder_hidden)
這句代碼當中,其中:
encoder_input:一共需要輸入三個維度,分別是【seq_len, batch,word_dim】
- seq_len:句子的長度
- batch:有多少個句子
- word_dim:單詞的維度
encoder_hidden:也是具備三個維度,分別是【num_layers,batch,hidden_size】
- num_layes:一共有多少層rnn
- batch:有多少個句子
- hidden_size:表示每一個rnn神經單位向量(每一個隱匿層)的向量長度,多個rnn神經網絡隱匿層就形成了我們的rnn
然後就是我們的輸出解釋了:
- hn:RNN的最後一個隱含狀態(最後一個隱匿層上方的輸出,而不是右邊,右邊是output)
- output:所有節點的hn集合(所有隱匿層都會有一個隱匿狀態的輸出,而這個output是所有隱匿層上方的一個集合)