如何选择 LSTM Keras 参数?

Posted

技术标签:

【中文标题】如何选择 LSTM Keras 参数?【英文标题】:How to choose LSTM Keras parameters? 【发布时间】:2017-12-29 21:41:06 【问题描述】:

我有多个时间序列的输入,我想正确构建 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)

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

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

非常感谢!

【问题讨论】:

这是一个非常广泛的问题,不直接涉及编程。你可以说得更详细点吗?你自己试图找出什么,你到底在哪里努力理解?你可能也想看看这个:***.com/questions/38714959/… 我阅读了这些文章,我知道这是一个非常广泛的问题,但我正在寻找对这些参数的一般解释。我希望收集使用它的人的经验。 【参考方案1】:

keras.io 文档的 part 非常有帮助:

LSTM 输入形状:具有形状的 3D 张量(batch_sizetimestepsinput_dim

这里还有一张图片说明了这一点:

我还将解释您示例中的参数:

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

hidden_​​nodes = 这是 LSTM 的神经元数量。如果您的数字更大,则网络会变得更强大。然而,要学习的参数数量也在增加。这意味着需要更多时间来训练网络。

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

input_dim = 特征/嵌入的尺寸。例如。句子中单词的向量表示

dropout_value = 为了减少过拟合,dropout 层只是随机抽取一部分可能的网络连接。该值是每个 epoch/batch 所考虑的网络连接的百分比。

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

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

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

decay = learning_reate 随着时间的推移减少了多少。

动量 = 动量率。较高的值有助于克服局部最小值,从而加快学习过程。 Further explanation.

nesterov = 如果应该使用nesterov 动量。 Here is a good explanation.

【讨论】:

SGD参数呢? SGD参数会影响分类结果吗? 当然,就像所有其他超参数一样。我通常更喜欢其他优化器,因为它们改进了 SGD,例如adam

以上是关于如何选择 LSTM Keras 参数?的主要内容,如果未能解决你的问题,请参考以下文章

如何使用 keras 堆叠 LSTM 模型正确塑造多类分类的输入

Keras中units参数的含义如何解释清楚?

如何使用 Keras 实现深度双向 LSTM?

如何在keras中堆叠多个lstm?

如何找到keras模型的参数数量?

Keras 中的 LSTM 实现是如何工作的