【问题标题】:Exploding gradients with long time series LSTMs使用长时间序列 LSTM 爆炸梯度
【发布时间】:2020-08-22 02:40:31
【问题描述】:

我正在尝试训练一个回溯大约 100 步的时间序列预测模型。然而,当我第一次开始训练它时,损失总是 nan。我想仔细看看,发现即使是第一个预测(在任何学习之前,可能使用随机初始化的权重),所有的值都是 NaN。如果我减少回顾次数,那么它几乎不会出现在 1e+36 左右,这仍然是超高的,并导致梯度爆炸(我猜,仍然不太熟悉这些术语。)

这是我的架构在代码中的样子:

model = Sequential()
model.add(TimeDistributed(Conv2D(filters=3, kernel_size=5, activation='relu', input_shape=(n_features, n_steps), data_format='channels_first')))
model.add(TimeDistributed(MaxPooling2D(pool_size=5, data_format='channels_first')))
model.add(TimeDistributed(Flatten()))
model.add(LSTM(128, activation='relu'))
model.add(Dropout(0.5))
model.add(Dense(outputs.shape[1]))
model.compile(optimizer='rmsprop', loss='mse')

还有形状,你可以从下面看到:

输入数据包括一些降水量(大约 50-150)、温度(-10 和 25 之间)和地下水位数据(100-500 之间),输出包括地下水位预测数据。

在我看来,在没有任何训练的情况下拥有 nans 或非常高的数字很奇怪,而且我不确定这是否称为爆炸梯度,我想知道我在这里做错了什么。

【问题讨论】:

  • 你试过缩放你的 X 和 y 吗?
  • @MarcoCerliani 是的,我做到了(最小-最大缩放),它工作正常,除了在实际预测中我不知道它将如何捕获可能高于或低于最小值的值数据的最大值。

标签: keras deep-learning time-series lstm


【解决方案1】:

我建议你在 (0., 1.) 范围内标准化你的输出,并在最后一层使用 sigmoid。

您始终可以使用逆变换来重建原始输出。

mn = np.min(y_train)
mx = np.max(y_train)
y_train = (y_train - mn)/(mx - mn)

# ... train

# inverse transform
y_train_original = y_train*(mx-mn) + mn

您的最后一层是linear,之前的激活是relu。您需要使用sigmoid 剪辑输出。

  1. 将您的输出标准化为0-1 范围。

  2. 在最后一层使用 sigmoid。 model.add(Dense(outputs.shape[1], activation = 'sigmoid'))

【讨论】:

  • 标准化了我的输出,并尝试在密集层进行 sigmoid 转换,但它不再起作用。我猜来自 LSTM 的值非常大。因此,我在 LSTM 上放置了一个 sigmoid,并将 relu 保持在稠密状态,第一个预测(没有任何学习)看起来还不错,但是即使经过 1 步拟合,它又是 nan。我看不到这里发生了什么。
  • 然后,检查您的数据。也许那里有些不一致。
【解决方案2】:

我建议你先删除这三行,看看你的模型是如何工作的:

model.add(TimeDistributed(Conv2D(filters=3, kernel_size=5, activation='relu', input_shape=(n_features, n_steps), data_format='channels_first')))
model.add(TimeDistributed(MaxPooling2D(pool_size=5, data_format='channels_first')))
model.add(TimeDistributed(Flatten()))

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2020-08-06
    • 2019-10-07
    • 1970-01-01
    • 2023-03-16
    • 2021-07-24
    • 1970-01-01
    • 2020-06-03
    • 2018-12-08
    相关资源
    最近更新 更多