2017-07-14 69 views
3

當我運行該代碼Keras:Keras get_weight解釋爲RNNs

networkDrive = Input(batch_shape=(1,length,1)) 
network = SimpleRNN(3, activation='tanh', stateful=False, return_sequences=True)(networkDrive) 

generatorNetwork = Model(networkDrive, network) 

predictions = generatorNetwork.predict(noInput, batch_size=length) 


print(np.array(generatorNetwork.layers[1].get_weights())) 

我得到這個輸出

[array([[ 0.91814435, 0.2490257 , 1.09242284]], dtype=float32) 
array([[-0.42028981, 0.68996912, -0.58932084], 
     [-0.88647962, -0.17359462, 0.42897415], 
     [ 0.19367599, 0.70271438, 0.68460363]], dtype=float32) 
array([ 0., 0., 0.], dtype=float32)] 

我猜想,即(3,3)矩陣是重矩陣,將RNN單元相互連接起來,並且兩個陣列中的一個可能是偏差 但是第三個是什麼?

回答

1

在simpleRNN實現中確實需要3組權重。

weights[0]是輸入矩陣。它轉換輸入並因此具有形狀[input_dim, output_dim]

weights[1]是recurent矩陣。它轉換經常性狀態並具有形狀[output_dim, output_dim]

weights[2]是偏差矩陣。它被添加到輸出並具有形狀[output_dim]

三個操作的結果相加,然後通過激活層。

我希望這現在更清楚了嗎?

+0

好的,有道理。爲什麼正常的密集層沒有輸入矩陣,但只是連通性和偏倚矩陣? –

+0

密集層只是「輸入層」。他們有形狀(input_dim,output_dim) –