Comment calculer le nombre de paramètres d'un LSTM réseau?
Est-il un moyen de calculer le nombre total de paramètres dans un LSTM réseau.
J'ai trouvé un exemple mais je ne suis pas sûr de la façon de corriger cette ou Si j'ai bien compris.
Pour 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 le vecteur d'entrée de longueur.
Et m
est le nombre de pas de temps. et dans cet exemple, ils considèrent que le nombre de couches cachées à 1.
Ainsi, selon la formule de la 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 est-il une telle différence?
Ai-je mal compris le exemple ou était la formule de mal ?
- Reportez-vous à ce lien si vous avez besoin d'une certaine aide visuelle: datascience.stackexchange.com/questions/10615/...
Vous devez vous connecter pour publier un commentaire.
N - le nombre de paramètres d'un LSTM couche dans Keras est égal à:
Supplémentaires
1
vient de biais termes. Doncn
est la taille de l'entrée (augmenté par le biais terme) etm
la taille de la sortie d'un LSTM couche.Donc finalement :
image via ce post
num_units + input_dim: concat [h(t-1), x(t)]
+ 1: biais
* 4: il y a 4 réseau de neurones des couches (boîte jaune) {W_forget, W_input, W_output, W_cell}
[(256 + 4096 + 1) * 256] * 4 = 4457472
PS: num_units = num_hidden_units = output_dims
Formule expansion pour @JohnStrong :
4 signifie que nous avons de différents poids et les biais de variables pour 3 portes (lecture /écriture /froget) et - 4-th - pour la état de la cellule (dans le même état caché).
(Celles-ci sont partagées entre les échéances sur certains caché vecteur d'état)
comme LSTM de sortie (y) est h (état caché) par l'approche, de sorte que, sans un supplément de projection, pour LSTM sorties, nous avons :
disons que c'est d :
Puis
LSTM Équations (via deeplearning.ai Coursera)
Je pense qu'il serait plus facile à comprendre si l'on commence avec un simple RNN.
Supposons que nous disposons de 4 unités (s'il vous plaît ignorer la ... dans le réseau et de se concentrer uniquement sur les unités visibles), et la taille de saisie (nombre de dimensions) est de 3:
Le nombre de poids est de 28 = 16 (
num_units * num_units
) pour les connexions récurrentes + 12 (input_dim * num_units
) pour la saisie. Le nombre de biais est tout simplementnum_units
.Recurrency signifie que chaque neurone de sortie est réinjectée dans le réseau tout entier, de sorte que si nous dérouler dans l'ordre du temps, il ressemble comme deux couches denses:
et qui fait comprendre pourquoi nous avons
num_units * num_units
poids pour la partie récurrente.Le nombre de paramètres pour cette simple RNN est 32 = 4 * 4 + 3 * 4 + 4, ce qui peut être exprimé comme
num_units * num_units + input_dim * num_units + num_units
ounum_units * (num_units + input_dim + 1)
Maintenant, pour LSTM, il faut multiplier le nombre de ces paramètres par 4, c'est le nombre de sous-paramètres à l'intérieur de chaque unité, et il a été bien illustré dans la réponse par @FelixHo