Wie berechnen Sie die Anzahl der Parameter eines LSTM-Netz?
Gibt es eine Möglichkeit zu berechnen, die Gesamtanzahl der Parameter in einem LSTM-Netz.
Ich habe ein Beispiel, aber ich bin mir nicht sicher, wie richtig diese ist oder Wenn ich es richtig verstanden habe.
ZB betrachten Sie das folgende Beispiel:-
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()
Ausgang
____________________________________________________________________________________________________
Layer (type) Output Shape Param # Connected to
====================================================================================================
lstm_1 (LSTM) (None, 256) 4457472 lstm_input_1[0][0]
====================================================================================================
Total params: 4457472
____________________________________________________________________________________________________
Gemäß Meinem Verständnis n
ist der Eingabevektor der Länge.
Und m
ist die Anzahl der Zeitschritte. und in diesem Beispiel betrachten Sie die Anzahl der verborgenen Ebenen 1.
Daher nach der Formel in die post. 4(nm+n^2)
in meinem Beispiel m=16
;n=4096
;num_of_units=256
4*((4096*16)+(4096*4096))*256 = 17246978048
Warum ist da so ein Unterschied?
Habe ich missverstanden, das Beispiel oder war die Formel falsch ?
- Siehe diesen link, wenn Sie benötigt einige visuelle Hilfe: datascience.stackexchange.com/questions/10615/...
Du musst angemeldet sein, um einen Kommentar abzugeben.
Nein - die Anzahl der Parameter einer LSTM-Ebene in Keras gleich:
Zusätzliche
1
kommt von bias-Bedingungen. Son
ist die Größe der Eingabe (durch den erhöhten bias-term) undm
die Größe der Ausgabe eines LSTM-Schicht.Also endlich :
Bild über diesem post
num_units + input_dim: concat [h(t-1), x(t)]
+ 1: bias
* 4: es gibt 4 neural network Layer (gelbes Feld) {W_forget, W_input, W_output, W_cell}
[(256 + 4096 + 1) * 256] * 4 = 4457472
PS: num_units = num_hidden_units = output_dims
Formel erweitern für @JohnStrong :
4 heißt, wir haben unterschiedliche Gewicht und bias-Variablen für 3 Tore (Lesen /schreiben /froget) und - 4-th - für die Zelle Stand (innerhalb der gleichen ausgeblendeten Zustand).
(Diese genannten sind gemeinsam von Zeitintervallen zusammen bestimmten hidden state vector)
als LSTM-Ausgang (y) ist h (hidden state) durch Ansatz, also ohne eine zusätzliche Projektion, für LSTM-Ausgänge, die wir haben :
lassen Sie uns sagen, es ist d :
Dann
LSTM Gleichungen (via deeplearning.ai Coursera)
Ich denke, es wäre einfacher zu verstehen, wenn wir beginnen mit einem einfachen RNN.
Nehmen wir an, wir haben 4 Einheiten (ignorieren Sie bitte die ... in der Netzwerk-und konzentrieren Sie sich nur auf sichtbare Einheiten), und die input-Größe (Anzahl der Dimensionen) 3:
Die Anzahl der GEWICHTE ist 28 = 16 (
num_units * num_units
) für die wiederkehrenden verbindungen + 12 (input_dim * num_units
) für die Eingabe. Die Zahl der Vorurteile ist einfachnum_units
.Recurrency bedeutet, dass jedes neuron die Ausgabe wird ebenfalls wieder in das gesamte Netzwerk, so dass, wenn wir bringen es in der zeitlichen Reihenfolge, es sieht aus wie zwei Dichte Schichten:
und er macht deutlich, warum wir
num_units * num_units
GEWICHTE für die wiederkehrenden Teil.Die Anzahl der Parameter für dieses einfache RNN 32 = 4 * 4 + 3 * 4 + 4, und kann ausgedrückt werden als
num_units * num_units + input_dim * num_units + num_units
odernum_units * (num_units + input_dim + 1)
Nun, für LSTM, müssen wir multiplizieren die Anzahl dieser Parameter von 4, da dies die Anzahl der sub-Parameter, die innerhalb jeder Einheit, und es war sehr schön illustriert in der Antwort von @FelixHo