2017-07-24 53 views
1

我在輸入中有多個時間序列,我想正確構建一個LSTM模型。如何選擇LSTM Keras參數?

我真的很困惑如何選擇參數。我的代碼:

model.add(keras.layers.LSTM(hidden_nodes, input_shape=(window, num_features), consume_less="mem")) 
model.add(Dropout(0.2)) 
model.add(keras.layers.Dense(num_features, activation='sigmoid')) 

optimizer = keras.optimizers.SGD(lr=learning_rate, decay=1e-6, momentum=0.9, nesterov=True) 

我想了解,對於每一行,輸入參數的含義以及如何選擇這些參數。

其實我沒有任何代碼問題,但我需要清楚地理解參數以獲得更好的結果。

非常感謝!

+0

這是一個非常廣泛的問題,不直接指編程。你可以說得更詳細點嗎?你自己試圖找出什麼,你在哪裏難以理解?你可能也想看看這個:https://stackoverflow.com/questions/38714959/understanding-keras-lstms?rq=1 – petezurich

+0

我發表了文章,我知道這是一個非常廣泛的問題,但我正在尋找這些參數的一般解釋。我希望收集使用它的經驗。 – Ghemon

回答

6

的keras.io文檔的這一part是非常有用:

LSTM輸入形狀:三維張量與形狀(的batch_size時間步input_dim

這裏也是一張圖片,說明了這一點: enter image description here

我還將介紹在您的示例中的參數:

model.add(LSTM(hidden_nodes, input_shape=(timesteps, input_dim))) 
model.add(Dropout(dropout_value)) 

hidden_​​nodes =這是LSTM的神經元的數量。如果你有更高的號碼,網絡變得更強大。但是,學習參數的數量也會增加。這意味着它需要更多時間來訓練網絡。

timesteps =您想要考慮的時間步數。例如。如果你想分類一個句子,這將是一個句子中的單詞數量。

input_dim =您的要素/嵌入的尺寸。例如。句子中單詞的向量表示

dropout_value =爲了減少過度擬合,丟失層只是隨機接受一部分可能的網絡連接。該值是每個時代/批次所考慮的網絡連接的百分比。

正如你所看到的,沒有必要指定batch_size。凱拉斯會自動照顧它。

optimizer = keras.optimizers.SGD(lr=learning_rate, decay=1e-6, momentum=0.9, nesterov=True) 

learning_rate =表示,權重多少每批更新。

衰退 = Learning_reate隨時間減少多少。

勢頭 =動量率。較高的值有助於克服局部最小值,從而加快學習過程。Further explanation.

nesterov =如果使用nesterov動量。 Here is a good explanation.

+0

SGD參數怎麼樣? – Ghemon

+1

我已更新我的帖子。 – Alex

+0

SGD參數是否影響分類結果? – Ghemon