Tensorflow RNN原始碼理解

2021-08-19 17:59:19 字數 1928 閱讀 7417

一、

閱讀原始碼

這個是tensorflow的

rnn原始碼,官方注釋解釋的比較清楚:

rnncell是乙個抽象類,

我們看下下它的屬性:

我們可以發現這裡用到的是python內建的

@property

裝飾器,就是負責把乙個方法變成屬性呼叫的,

很像c#中的屬性、欄位的那種概念。

state_size

和output_size

規定了隱層的大小和輸出張量的大小。

下面是重要的__call__方法,有點像usrp中的

work()

或者general_work()

的功能。這裡我們注意到輸入的引數有

inputs,

、state

,這裡其實就是指輸入層和隱層了。但是這裡有規定

inputs

的格式為(

batch_size,input_size

),state

的格式為(

batch_zie,state_size),

這很容易理解,因為我們進行訓練資料會分成很多

batch

。與普通的神經網路結構一樣,輸入層、隱層、輸出層的

size

並沒有關係,視應用場景而定。

還有乙個總要的方法是初始化方法:

basicrnncell、grucell、

basiclstmcell

、lstmcell

都是繼承於

layerrnncell

,而layerrnncell

繼承於上面講的抽象類

rnncell

,這就是

tensorflow

中rnn

的繼承關係。

這裡不做過多介紹,但是有意思的一點是這裡:

其實basicrnncell的輸出、隱層狀態是一樣的。而basiclstmcell的隱層狀態和輸出是不一樣的。

同樣rnn的隱層也可以構建多層

multirnncell

。根據原始碼可知:

隱層狀態的返回值是元組(tuple)型別。

最重要的乙個類dynamic_rnn(batch_size,time_steps,input_size),引數很好理解,但是需要強調的是

state

是最後一步的隱藏狀態,形狀是(

batch_size,cell.state_size

),time_steps

是呼叫rnncell

抽象類中

__call__()

函式的次數,

output

是所有steps

的輸出。

time_major=true

的情況下將

output

的格式中

batch_szie

和time_steps

位置交換。

AbstractCollection原始碼分析

abstractcollection抽象類提供了collection的骨架實現,collection分析請看 這裡直接看它的 是如何實現的.public abstract iterator iterator 該方法沒有實現.public abstract int size 該方法沒有實現.publi...

ThreadPoolExecutor原始碼閱讀

執行緒池解決兩個問題 一是復用執行緒,減少建立銷毀執行緒帶來系統開銷 二是限定系統資源使用邊界,避免大量執行緒消耗盡系統記憶體 適用於互不依賴,執行時間短,不需要對執行緒控制操作的執行緒 新增任務時,1.若執行緒數量小於corepoolsize,則新增執行緒執行任務 2.若執行緒數量大於等於core...

OrangePi One Android 原始碼編譯

一 系統環境搭建參照 二 lichee原始碼編譯 1.檢視help build.sh h2.配置核心 cd linux 3.4 make arch arm menuconfig 進入配置頁面,上下移動列表,空格是選擇列表,左右移動選擇退出選項 3.首次編譯執行清除 在 lichee linux3.4...