2017-07-14 3 views
3

Quand je courais ce code avec Keras:Keras l'interprétation pour 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())) 

Je reçois cette sortie

[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)] 

je suppose, que le (3,3) Matrix est le poids matrice, reliant les unités RNN les uns avec les autres, et l'un des deux tableaux est probablement le biais Mais quel est le troisième?

Répondre

1

Dans l'implémentation simpleRNN, il existe en effet 3 jeux de poids.

weights[0] est la matrice d'entrée. Il transforme l'entrée et a donc une forme [input_dim, output_dim]

weights[1] est la matrice recurent. Il transforme l'état récurrent et a une forme [output_dim, output_dim]

weights[2] est la matrice de polarisation. Il est ajouté à la sortie et a une forme [output_dim]

les résultats des trois opérations sont sommés et passent ensuite par une couche d'activation.

J'espère que c'est maintenant plus clair?

+0

Ok, c'est logique. Pourquoi la couche dense normale n'a pas de matrice d'entrée, mais seulement les matrices de connectivité et de biais? –

+0

Les couches Denses sont seulement "couche d'entrée". Ils ont la forme (input_dim, output_dim) –