Keras RNN 原始碼分析

2021-09-19 21:04:03 字數 1670 閱讀 3154

在 keras 原始碼中, layers/recurrent.py 中看到 rnn 實現方式

rnn 中的迴圈體使用 rnncell 來進行定義的,

在 rnn(layer) 中的 compute_output_shape 函式可以檢視到 rnn 輸出維度的計算方法, 可以看出維度為 (輸入維度, 輸出維度) .**如下:

def compute_output_shape(self, input_shape):

if isinstance(input_shape, list):

input_shape = input_shape[0]

if hasattr(self.cell.state_size, '__len__'):

output_dim = self.cell.state_size[0]

else:

output_dim = self.cell.state_size

if self.return_sequences:

output_shape = (input_shape[0], input_shape[1], output_dim)

else:

output_shape = (input_shape[0], output_dim)

if self.return_state:

state_shape = [(input_shape[0], output_dim) for _ in self.states]

return [output_shape] + state_shape

else:

return output_shape

其中通過檢視 lstmcell 中的定義內容,如下:

def __init__(self, units,

....

**kwargs):

super(lstmcell, self).__init__(**kwargs)

self.units = units

self.activation = activations.get(activation)

self.recurrent_activation = activations.get(recurrent_activation)

self.use_bias = use_bias

....

self.dropout = min(1., max(0., dropout))

self.recurrent_dropout = min(1., max(0., recurrent_dropout))

self.implementation = implementation

self.state_size = (self.units, self.units)

self._dropout_mask = none

self._recurrent_dropout_mask = none

因此, 對於 lstmcell 來說輸出的 shape 即為 (input_shape[0], units, units), 在**中可以看到 rnn 是通過 state 來管理當前 rnnlayer 使用哪個 lstmcell 進行當前計算.

在 rnnlayer 中存在 recurrent_kernel ,該只用來存放再傳入下個 state 時使用的 kernel,

spring原始碼分析 spring原始碼分析

1.spring 執行原理 spring 啟動時讀取應用程式提供的 bean 配置資訊,並在 spring 容器中生成乙份相應的 bean 配置登錄檔,然後根據這張登錄檔例項化 bean,裝配好 bean 之間的依賴關係,為上 層應用提供準備就緒的執行環境。二 spring 原始碼分析 1.1spr...

思科VPP原始碼分析(dpo機制原始碼分析)

vpp的dpo機制跟路由緊密結合在一起。路由表查詢 ip4 lookup 的最後結果是乙個load balance t結構。該結構可以看做是乙個hash表,裡面包含了很多dpo,指向為下一步處理動作。每個dpo都是新增路由時的乙個path的結果。dpo標準型別有 dpo drop,dpo ip nu...

redux原始碼分析(三) 原始碼部分

下面是每個部分的一些解讀 createstore apicreatestore reducer,initialstate enhancer 曾經非常好奇這個函式的第二個引數到底是initialstate還是enhancer,因為見過兩種寫法都有的,以為是版本問題。看了原始碼才發現,都可以的。如果你不...