Keras中LSTM使用過程中的幾個易混點

2021-10-08 06:57:44 字數 1863 閱讀 9684

現在dl學習的過程已經越來越簡單的了,儘管很多時候真的只是呼叫api即可,但遇到需要定製的需求,這時候就需要清晰理解各個注意點,這裡記錄下lstm api使用中的幾處筆記。

1、lstmcell類和lstm類的區別

解答:lstmcell類是對lstm單個計算單元的完整封裝,裡面包含了各個計算步驟的詳細過程,在lstm層中用作實際計算單元。而lstm類是抽象類rnn的子類,通過例項化lstmcell來完成lstm的計算。簡單來說,lstmcell類是lstm的「心」,而lstm類是lstm的「殼」(比喻不一定恰當)。

2、lstm中的return_sequences和return_state的區別?

解答:return_sequence返回每個時間步上的隱狀態(hidden state),return_state返回最後乙個時間步上的隱狀態和細胞狀態(hidden state和cell state)。

y = lstm(units=self.rnn_units)(x) 

tensor("lstm_1/tensorarrayreadv3:0", shape=(?, 128), dtype=float32)

y = lstm(units=self.rnn_units, return_sequences=true)(x)

tensor("lstm_2/transpose_2:0", shape=(?, ?, 128), dtype=float32)

y = lstm(units=self.rnn_units, return_state=true)(x)

[, , ]

y = lstm(units=self.rnn_units, return_sequences=true, return_state=true)(x)

[, , ]

3、lstm中activation和recurrent_activation的區別?

解答:recurrent_activation是針對三個門機制(遺忘門、輸入門、輸出門)的啟用函式,而activation是針對輸入資訊(預設tanh)和當前隱狀態輸出(預設tanh)的啟用函式。

4、lstmcell類和lstm類分別如何使用?

rnn(lstmcell(32))

lstm(32)

這2者等價

5、lstm(32)呼叫關係的簡單分析

解答:step1:例項化lstmcell()和呼叫執行。

step2:根據各個引數確定output_shape大小(比如return_state)

step3:呼叫tf(假定後端使用tf)後端k.rnn()

step4:後端tf中呼叫control_flow_ops.while_loop(位於control_flow_ops.py檔案中)

下面最後乙個呼叫關係比較複雜,暫還沒看懂。

6、keras使用過程中,activation等引數接受字串值,keras是如何實現真正呼叫到相應啟用函式的?

解答:在activations.py中呼叫globals()函式,獲取到當前py模組中全域性變數對映,其中各個啟用函式的名字和啟用函式本身存在kv的對映關係。直接get啟用函式名稱字串就能得到啟用函式本身。這其實是一種「反射」機制。

-- 未完待續 --

element ui dialog使用過程中的坑

場景一 我們將dialog寫成乙個可復用的公共元件用於顯示不同內容 如 操作中的修改或新增的彈窗 之後發現dialog的遮罩將彈出層 點選修改或新增後理應由乙個彈窗顯示出來 都蓋住了,而我想要的效果是遮罩只遮住舊的視窗,而當前視窗應該完全顯示 注 是使用easyui的panel和window來包裹的...

python使用過程中問題

1.檢視python支援的 whl格式 在cmd輸入python 或者 python3.6 import pip print pip.pep425tags.get supported 2.在修改python.exe為python36.exe 任何重新命名 後,pip會報錯 fatal error i...

Spring data Jpa使用過程中遇到的坑

一定要注意如果我們在實體類中沒有配置資料表的預設值,那麼在存入和取出的時候應該設定。否則在取出的時候就會出現問題。如何通過一方獲取到多方實體 jsp中 jsp資料夾與上面servlet對映名最好不要一致,這樣會出問題 注意!乙個實體類的表id名字請設定為id,保證不出錯。問題分析 解決方法 其實一般...