web-dev-qa-db-fra.com

Comment calculer le nombre de paramètres d'un réseau LSTM?

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

J'ai trouvé un exemple mais je ne suis pas sûr de la correction ceci est ou si je l'ai bien compris.

Par exemple, considérons 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 la longueur du vecteur d’entrée. Et m est le nombre de pas de temps. et dans cet exemple, ils considèrent que le nombre de couches cachées est égal à 1.

D'où selon la formule dans le post.4(nm+n^2) dans mon exemple m=16; n=4096; num_of_units=256

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

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

9
Arsenal Fanatic

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

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

1 supplémentaire provient de termes de biais. Donc n est la taille de l'entrée (augmenté du terme de biais) et m est la taille de la sortie d'une couche LSTM.

Alors finalement:

4 * (4097 * 256 + 256^2) = 4457472
22
Marcin Możejko

 enter image description here image via ce post

num_params = [(num_units + input_dim + 1) * num_units] * 4

num_units + input_dim: concat [h (t-1), x (t)]

+ 1: biais

* 4: il y a 4 couches de réseau de neurones (boîte jaune) {W_forget, W_input, W_output, W_cell}

model.add(LSTM(units=256, input_dim=4096, input_length=16))

[(256 + 4096 + 1) * 256] * 4 = 4457472

PS: num_units = num_hidden_units = output_dims

7
FelixHo

Formule en expansion pour @JohnStrong

4 signifie que nous avons différentes variables de pondération et de biais pour 3 portes (lecture/écriture/froget) et - 4-ème - pour l'état état de la cellule (dans la même état caché). (Ceux-ci sont partagés entre des pas de temps le long d'un vecteur d'état caché particulier)

4 * lstm_hidden_state_size * (lstm_inputs_size + bias_variable + lstm_outputs_size) 

comme la sortie LSTM (y) est h (état caché) par approche, donc, sans projection supplémentaire, pour les sorties LSTM, nous avons: 

lstm_hidden_state_size = lstm_outputs_size 

disons que c'est d:

d = lstm_hidden_state_size = lstm_outputs_size 

Ensuite 

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

Équations LSTM (via deeplearning.ai Coursera)

 enter image description here

  • Il est évident d'après les équations que les dimensions finales de toutes les 6 équations seront identiques et la dimension finale doit nécessairement être égale à la dimension de a(t) .

  • Sur ces 6 équations, seules 4 équations contribuent au nombre de paramètres et, en regardant les équations, on peut en déduire que toutes les 4 équations sont symétriques. Donc, si nous trouvons le nombre de paramètres pour 1 équation, nous pouvons simplement le multiplier par 4 et dire le nombre total de paramètres.

  • Un point important est de noter que le nombre total de paramètres ne dépend pas des pas de temps (ou longueur_entrée), car les mêmes "W" et "b" sont partagés tout au long du pas de temps.

  • En supposant, un initié de la cellule LSTM n’ayant qu’une couche pour une porte (comme dans Keras).

  • Prendre l'équation 1 et permet de relater. Soit le nombre de neurones de la couche n et le nombre de dimensions de x be m (sans le nombre d’exemples et de pas de temps). Par conséquent, la dimension d'oublier la porte sera n aussi. Comme dans ANN, les dimensions de "Wf" seront n * (n + m) et les dimensions de "bf" seront n. Par conséquent, le nombre total de paramètres pour une équation sera [{n * (n + m)} + n] . Par conséquent, le nombre total de paramètres sera 4 * [{n * (n + m)} + n]. Permet d’ouvrir les crochets et nous obtiendrons -> 4 * (nm + n2 + n) .

  • Donc, selon vos valeurs. L'alimentation dans la formule donne: -> (n = 256, m = 4096), le nombre total de paramètres est 4 * ((256 * 256) + (256 * 4096) + (256)) = 4 * (1114368) = 4457472.

  • 0
    Kenpachi Zaraki