2016-06-28 59 views
5

Có cách nào để tính tổng số tham số trong mạng LSTM không.Cách tính số tham số của mạng LSTM?

Tôi đã tìm thấy một ví dụ nhưng tôi không chắc chắn về cách chính xác this là hoặc Nếu tôi đã hiểu chính xác.

Đối với ví dụ như xem xét các ví dụ sau: -

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

Output

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

Theo hiểu biết của tôi n là chiều dài vector đầu vào. Và m là số bước thời gian. và trong ví dụ này, họ xem xét số lớp ẩn là 1.

Do đó theo công thức trong the post.4(nm+n^2) trong ví dụ của tôi m=16; n=4096; num_of_units=256

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

Tại sao có sự khác biệt như vậy? Tôi đã hiểu sai ví dụ hoặc là công thức sai?

+0

Tham khảo link này nếu bạn cần sự giúp đỡ trực quan: http://datascience.stackexchange.com/questions/10615/number-of-parameters-in-an-lstm-model – Ali

Trả lời

14

Không - số lượng các thông số của một lớp LSTM trong Keras tương đương với:

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

bổ sung 1 xuất phát từ thuật ngữ thiên vị. Vì vậy, n là kích thước của đầu vào (tăng theo cụm từ thiên vị) và m là kích thước đầu ra của một lớp LSTM.

Vì vậy, cuối cùng:

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

Cám ơn câu trả lời .. Bạn cũng có thể thêm nguồn –

+1

Cảm ơn!Tôi đã cố gắng để lấy được điều này, và chỉ không thể tìm ra những gì chèn vào mà thiếu "+1" hạn. – Prune

+0

Vì vậy, nếu tôi không sai input_length như không có hiệu lực trên các tham số như ma trận trọng lượng tương tự sẽ được tái sử dụng cho 1 hoặc 100 bước thời gian ?? –

1

Formula mở rộng cho @JohnStrong:

nghĩa là chúng ta có các biến trọng lượng và thiên vị khác nhau cho 3 cửa (đọc/ghi/froget) và - 4 th - cho trạng thái ô (trong cùng trạng thái ẩn). (Những nêu được chia sẻ giữa timesteps cùng vector trạng thái ẩn đặc biệt)

4 * lstm_hidden_state_size * (lstm_inputs_size + bias_variable + lstm_outputs_size) 

như sản lượng LSTM (y) là h (ẩn nhà nước) bằng cách tiếp cận, vì vậy, không có chiếu thêm, cho kết quả đầu ra LSTM chúng ta có:

lstm_hidden_state_size = lstm_outputs_size 

giả sử nó là d:

d = lstm_hidden_state_size = lstm_outputs_size 

Sau đó

params = 4 * d * ((lstm_inputs_size + 1) + d) = 4 * ((lstm_inputs_size + 1) * d + d^2) 
Các vấn đề liên quan