2016-06-28 4 views
5

Existe-t-il un moyen de calculer le nombre total de paramètres dans un réseau LSTM.Comment calculer le nombre de paramètres d'un réseau LSTM?

J'ai trouvé un exemple mais je ne suis pas sûr de la façon correcte this ou si j'ai bien compris.

Pour voir l'exemple suivant: -

from keras.models import Sequential 
from keras.layers import Dense, Dropout, Activation 
from keras.layers import Embedding 
from keras.layers import LSTM 
model = Sequential() 
model.add(LSTM(256, input_dim=4096, input_length=16)) 
model.summary() 

Sortie

____________________________________________________________________________________________________ 
Layer (type)      Output Shape  Param #  Connected to      
==================================================================================================== 
lstm_1 (LSTM)      (None, 256)   4457472  lstm_input_1[0][0]    
==================================================================================================== 
Total params: 4457472 
____________________________________________________________________________________________________ 

Selon ma compréhension n est le vecteur d'entrée longueur. Et m est le nombre de pas de temps. et dans cet exemple ils considèrent que le nombre de couches cachées est 1.

D'après la formule en the post.4(nm+n^2) dans mon exemple m=16; n=4096; num_of_units=256

4*((4096*16)+(4096*4096))*256 = 17246978048 

Pourquoi existe-t-il une telle différence? Ai-je mal compris l'exemple ou la formule était-elle incorrecte?

+0

Reportez-vous à ce lien si vous avez besoin d'une aide visuelle: http://datascience.stackexchange.com/questions/10615/number-of-parameters-in-an-lstm-model – Ali

Répondre

14

Non - le nombre de paramètres d'une couche de LSTM en Keras égal à:

params = 4 * ((size_of_input + 1) * size_of_output + size_of_output^2) 

supplémentaires 1 vient de termes de biais. Donc n est la taille de l'entrée (augmentée par le terme de polarisation) et m est la taille de la sortie d'une couche LSTM.

Alors enfin:

4 * (4097 * 256 + 256^2) = 4457472 
+0

Merci pour la réponse .. Pourriez-vous également ajouter la source –

+1

Merci!J'essayais de dériver ceci, et juste ne pourrais pas comprendre dehors ce qui a inséré ce terme «+1» manquant. – Prune

+0

Donc, si je ne me trompe pas, la longueur d'entrée n'a aucun effet sur les paramètres car la même matrice de poids serait réutilisée pendant 1 ou 100 pas de temps? –

1

Formule expansion pour @JohnStrong:

signifie que nous avons différentes variables de poids et de biais pour 3 portes (lecture/écriture/Froget) et - 4- th - pour l'état de cellule (dans le même état masqué). (Ceux-dessus sont partagés entre pas de temps le long de vecteur d'état caché particulier)

4 * lstm_hidden_state_size * (lstm_inputs_size + bias_variable + lstm_outputs_size) 

comme sortie LSTM (y) est h (état masqué) en approche, de sorte que, sans une projection supplémentaire, pour les sorties de LSTM nous avons:

lstm_hidden_state_size = lstm_outputs_size 

disons que c'est d:

d = lstm_hidden_state_size = lstm_outputs_size 

Alors

params = 4 * d * ((lstm_inputs_size + 1) + d) = 4 * ((lstm_inputs_size + 1) * d + d^2)