逐步理解RNN

2021-08-29 13:56:19 字數 1773 閱讀 9474

逐步理解rnn迴圈神經網路:

先了解一下最基本的單層網路,它的結構如圖:

輸入是x,經過變換wx+b和啟用函式f得到輸出y。

前面狀態輸出會影響後面狀態輸出的情況有下面幾種:

為了建模序列問題,rnn引入了隱狀態h(hidden state)的概念,h可以對序列形的資料提取特徵,接著再轉換為輸出。先從h1的計算開始看:

每一步使用的引數u、w、b都是一樣的,也就是說每個步驟的引數都是共享的,這點非常重要。

依次計算

(使用相同的引數u、w、b)

對h1進行一次變換,得到輸出y1

同樣使用相同的v和c得到y2、y3、y4

模型構造完成,輸入x1,…,xn,輸出y1,…,yn,輸入和輸出序列等長。

時間步time_steps問題的理解:

執行一次call方法,就進行一步轉化,從h0->h1:

cell = tf.nn.rnn_cell.basicrnncell(num_units=128)

呼叫一次call方法

使用tf.nn.dynamic_rnn一次執行多步(引數中用到時間步time_steps):

輸入資料的格式為(batch_size, time_steps, input_size) time_steps為時間步,表示序列本身的長度,長度為10的句子對應的time_steps就等於10,這樣就可以直接輸入x1,...,x10,得到h1,...,h10

outputs, state = tf.nn.dynamic_rnn(cell, inputs, initial_state=initial_state)

得到的outputs就是time_steps步裡所有的輸出。它的形狀為(batch_size, time_steps, cell.output_size)。state是最後一步的隱狀態,它的形狀為(batch_size, cell.state_size)。

堆疊rnncell

單層rnn的能力有限,我們需要多層的rnn。將x輸入第一層rnn的後得到隱層狀態h,這個隱層狀態就相當於第二層rnn的輸入,第二層rnn的隱層狀態又相當於第三層rnn的輸入,以此類推。在tensorflow中,可以使用tf.nn.rnn_cell.multirnncell函式對rnncell進行堆疊

def get_a_cell():

return tf.nn.rnn_cell.basicrnncell(num_units=128)  #

每層128個狀態 #

用tf.nn.rnn_cell multirnncell建立3層rnn

cell = tf.nn.rnn_cell.multirnncell([get_a_cell() for _ in range(3)]) # 3

層rnn

BP演算法和RNN 雙向RNN的理解

我們在學習某種神經網路模型時,一定要把如下幾點理解透了,才算真正理解了這種神經網路。網路的架構 包含那些層,每層的輸入和輸出,有那些模型引數是待優化的 前向傳播演算法 損失函式的定義 後向傳播演算法 什麼情況下認為是發現了過擬合,怎麼進行優化。很多介紹深度學習的書籍,在介紹全連線神經網路時,對這幾個...

入門理解RNN 通俗篇

rnn種類很多,也比較繞腦子。不過讀者不用擔心,本文將一如既往的對複雜的東西剝繭抽絲,幫助您理解rnns以及它的訓練演算法,並動手實現乙個迴圈神經網路。rnn是在自然語言處理領域中最先被用起來的,比如,rnn可以為語言模型來建模。那麼,什麼是語言模型呢?我們可以和電腦玩乙個遊戲,我們寫出乙個句子前面...

RNN和LSTM GRU的簡單理解

rnn迴圈神經網路,recurrent neural networks 1,rnns已經在眾多自然語言處理 natural language processing,nlp 中取得了巨大成功以及廣泛應用,如語言模型與文字生成,機器翻譯,語音識別,2,rnns的目的是用來處理序列資料,rnn中乙個序列當...