【问题标题】:Keras LSTM problem, how set up correctly a neural network for time series?Keras LSTM 问题,如何正确设置时间序列的神经网络?
【发布时间】:2019-05-23 12:22:07
【问题描述】:

我试图理解 lstm 如何使用 Keras 预测时间序列。 这是我的例子。 我使用加速度计,我有一个 128.000 的时间序列。我想采取: n_steps_in = 10.000 n_steps_out = 5.000 进行预测。

我将大序列分为 114 个样本、10.000 个时间序列和 1 个特征 X = [114, 10.000, 1] y = [114, 5.000]

我试图了解要使用多少隐藏层,多少神经元。 作为一个回归,我想使用

activation=ReLU, 
loss = mse
optimizer=adam

问题是很多时候我的损失等于 nan,我不明白为什么。

这是我的代码示例

model1 = Sequential()
model1.add(LSTM(200, activation='relu', input_shape=(n_steps_in, n_features)))
model1.add(Dense(n_steps_out))
model1.compile(optimizer='adam', loss='mse')

希望有人给点建议,谢谢!!

【问题讨论】:

  • 多少个 epoch 以及你的批量大小是多少?
  • 我尝试了 100 个 epochs,batch_size 32(keras 的 fit 函数的默认值)

标签: python keras time-series lstm recurrent-neural-network


【解决方案1】:

首先,尝试通过向输出层添加激活函数来修复它:

model.add(Dense(n_steps_out, activation='linear'))

但是

训练时获取nan通常意味着Exploding Gradient

在深度网络或循环神经网络中,误差梯度可以 在更新期间累积并导致非常大的梯度。这些 反过来会导致网络权重的大量更新,反过来, 不稳定的网络。在极端情况下,权重值可以变为 大到溢出并导致 NaN 值。

查看this 机器学习掌握中的帖子。它可以让您很好地了解问题所在以及一些潜在的解决方案。

【讨论】:

    【解决方案2】:

    虽然 LSTM 被广泛用于序列数据表示,但在非深度学习分类器中,XGBoost 取得了最好的结果

    【讨论】:

      猜你喜欢
      • 2019-12-29
      • 2022-08-15
      • 2020-02-25
      • 1970-01-01
      • 1970-01-01
      • 2015-02-10
      • 1970-01-01
      • 2020-09-15
      • 1970-01-01
      相关资源
      最近更新 更多