Как рассчитать количество параметров сети LSTM?
есть ли способ рассчитать общее количество параметров в сети LSTM.
Я нашел пример, но я не уверен, как правильно этой или если я правильно понял.
например, рассмотрим следующий пример:-
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()
выход
____________________________________________________________________________________________________
Layer (type) Output Shape Param # Connected to
====================================================================================================
lstm_1 (LSTM) (None, 256) 4457472 lstm_input_1[0][0]
====================================================================================================
Total params: 4457472
____________________________________________________________________________________________________
согласно моему пониманию n
- длина входного вектора.
И m
- это количество временных шагов. и в этом примере они рассматривают число скрытых слоев равным 1.
отсюда по формуле пост. 4(nm+n^2)
в моем примере m=16
;n=4096
;num_of_units=256
4*((4096*16)+(4096*4096))*256 = 17246978048
почему такая разница? Я неправильно понял пример или формула была неправильной ?
3 ответов
No-количество параметров слоя LSTM в Keras равно:
params = 4 * ((size_of_input + 1) * size_of_output + size_of_output^2)
дополнительные 1
происходит от терминов смещения. Так что n
размер входного сигнала (увеличенный термином смещения) и m
- размер вывода слоя LSTM.
Итак, наконец :
4 * (4097 * 256 + 256^2) = 4457472
расширение формулы для @JohnStrong :
4 означает, что у нас разные переменные веса и смещения для 3 ворот (чтение / запись / froget) и-4-й-для состояния клеток (в том же скрытом состоянии). (Они упоминаются совместно между шагами времени вдоль конкретного скрытого вектора состояния)
4 * lstm_hidden_state_size * (lstm_inputs_size + bias_variable + lstm_outputs_size)
как выход LSTM (y) составляет h (скрытое состояние) по подходу, так, без дополнительного проекция, для выходов LSTM мы имеем:
lstm_hidden_state_size = lstm_outputs_size
допустим, это d:
d = lstm_hidden_state_size = lstm_outputs_size
затем
params = 4 * d * ((lstm_inputs_size + 1) + d) = 4 * ((lstm_inputs_size + 1) * d + d^2)
num_params = [(num_units + input_dim + 1) * num_units] * 4
num_units + input_dim: конкат [h (t-1), x(t)]
+ 1: смещение
* 4: существует 4 слоя нейронной сети (желтое поле) {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