如何选择LSTM Keras参数?

时间:2017-07-24 10:33:06

标签: python time-series deep-learning keras lstm

我在输入中有多个时间序列,我想正确构建LSTM模型。

我对如何选择参数感到很困惑。我的代码:

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)

我想了解每行,输入参数的含义以及如何选择这些参数。

实际上我对代码没有任何问题,但我需要清楚地了解参数以获得更好的结果。

非常感谢!

1 个答案:

答案 0 :(得分:23)

这个part的keras.io文档非常有用:

  

LSTM输入形状:具有形状的3D张量( 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的神经元数量。如果您的号码越大,网络就越强大。但是,学习的参数数量也会增加。这意味着需要更多时间来训练网络。

时间步长 =您要考虑的时间步数。例如。如果你想对一个句子进行分类,这将是一个句子中的单词数量。

input_dim =功能/嵌入的尺寸。例如。句子中单词的矢量表示

dropout_value =为了减少过度拟合,丢失层只是随机获取一部分可能的网络连接。此值是每个纪元/批次所考虑的网络连接的百分比。

如您所见,无需指定 batch_size 。 Keras会自动处理它。

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.