2016-06-28 34 views
5

Czy istnieje sposób obliczenia całkowitej liczby parametrów w sieci LSTM.Jak obliczyć liczbę parametrów sieci LSTM?

Znalazłem przykład, ale nie jestem pewien, jak poprawne jest this lub czy zrozumiałem to poprawnie.

Na przykład rozważmy następujący przykład: -

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() 

Wyjście

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

Jak na moje rozumienie n jest długość wektora wejściowego. I m to liczba kroków czasowych. i w tym przykładzie uważają liczbę ukrytych warstw za 1.

Tak więc zgodnie ze wzorem w the post.4(nm+n^2) w moim przykładzie m=16; n=4096; num_of_units=256

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

Dlaczego istnieje taka różnica? Czy źle zrozumiałem przykład, czy formuła była błędna?

+0

Patrz tego linku jeśli potrzebował pomocy wizualnych: http://datascience.stackexchange.com/questions/10615/number-of-parameters-in-an-lstm-model – Ali

Odpowiedz

14

Nie - liczba parametrów warstwy LSTM w Keras równa:

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

dodatkowe 1 pochodzi z warunkami stronniczości. Tak więc n jest wielkością wejściową (zwiększoną o wartość odchylenia), a m jest wielkością wyjściową warstwy LSTM.

więc ostatecznie:

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

Dzięki za odpowiedź .. Czy możesz również dodać źródło –

+1

Dzięki!Próbowałem to wywnioskować i nie mogłem pojąć, co wstawiło brakujący "+1" termin. – Prune

+0

Więc jeśli się nie mylę, długość wejścia jako brak wpływu na parametry, ponieważ ta sama macierz wagowa byłaby ponownie użyta dla 1 lub 100 kroków czasowych ?? –

1

Formula rozszerzenie dla @JohnStrong:

oznacza, że ​​mamy różne wagi i stronniczości zmiennych dla 3 bram (odczyt/zapis/froget) oraz - 4- th - dla stanu komórki (w tym samym ukrytym stanie). (takie wymienione są dzielone pomiędzy timesteps wzdłuż określonego ukrytego wektora stanu)

4 * lstm_hidden_state_size * (lstm_inputs_size + bias_variable + lstm_outputs_size) 

jako wyjście LSTM (Y) jest H (ukryty stan) podejściem, więc bez dodatkowej projekcji wyjść LSTM mamy:

lstm_hidden_state_size = lstm_outputs_size 

powiedzmy to d:

d = lstm_hidden_state_size = lstm_outputs_size 

Następnie

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