關於RNN相關模型 tensorflow原始碼理解

2021-08-25 14:41:49 字數 1343 閱讀 1518

本文主要是對tensorflow中lstm模型中的c,h進行解析。rnn_cell_impl.py

在rnn_cell_impl.py的tensorflow原始碼中,關於rnn部分實現的類主要是basicrnncell,

首先在build函式中,定義了兩個變數_kernel和_bias。

其中_num_untis表示rnn cell 的untis數目。

所以在call函式中,hidden_state的更新如下所示:

從上面中可以看出,rnn首先將input與上乙個state連線,然後與在build函式中定義的_kernal變數點乘,最後加上偏置項。

主要看basiclstmcell這個類,在build函式中,定義了兩個引數_kernel與_bias

與rnn不同,引數_kernal與_bias的列都是_num_units的四倍,主要是因為後面要分成四個部分,分別為i,j,f,o。

因此,在call函式中,

在call函式中,i,j,f,o可以分別表示為:

所以,在上面的圖中,最上面的橫線表示c,最小面的橫線表示h。

在gru模型中的build函式中,可以看到定義了四個引數:

因此,在call函式中,

從下面的圖中可以看出,zt為u,r表示rt,

從tensorflow的原始碼來看,上面的公式中ht的求解有問題,所以參考維基百科,得到下面的公式:

tensorflow相關tensor計算函式

1.tf.split 該函式主要用於對tensor進行分割,一般在設定多gpu平行計算時經常會被用到,主要是將乙個batch資料集進行平分,分配給各個gpu,最後再彙總各個gpu得到的損失,從而加快模型的訓練速度,其主要引數的定義如下 import tensorflow as tf tf.split...

RNN應用 基於RNN的語言模型

rnn迴圈神經網路,具有處理序列資料的能力,也就是前面的資料跟後面的資料出現順序是有關係的。以下內容來自 我 昨天 上學 遲到 了 神經網路的輸出如下圖所示 其中,s和e是兩個特殊的詞,分別表示乙個序列的開始和結束。使用這種向量化方法,我們就得到了乙個高維 稀疏的向量 稀疏是指絕大部分元素的值都是0...

RNN與語言模型

語言模型是給乙個句子分配概率的任務,例如 看到 the lazy dog barked loadly 的概率有多大呢?語言模型對機器翻譯有用,比如在單詞順序的選擇問題上,語言模型得到句子 the cat is samll 的概率應該大於 small the is cat 的概率。當前很難為所有可能的...