为什么 LSTM 预测的降雨量对某些数据点为负数?

数据挖掘 深度学习 lstm 训练 rnn
2021-10-04 19:30:43

我使用 tanh 激活函数和 0.1 dropout 对 LSTM 网络进行监督学习进行时间序列预测。我的 loss='mean_squared_error',optimizer='adam'。预测的时间序列如下所示,其中 x 轴显示未来月份,y 轴显示以毫米为单位的降雨量。橙色线是预测的,蓝线是实际的。即使训练数据集的所有点的值 >=0,某些点仍被预测为低于 0(负)。我的训练数据集是 64 年(所有正数据),我预测 12 年(显示 144 个数据点)降雨预测

使用 ReLU 激活的模型代码:

model = Sequential()
# LSTM model
model.add(LSTM(128, batch_input_shape=(batch_size, look_back, 1),activation='relu', stateful=True, return_sequences=False))
model.add(Dropout(0.1)) #for better regularization
model.add(Dense(1))
model.compile(loss='mean_squared_error', optimizer='adam')
1个回答

目前,您的模型不受猜测任何数字的限制。在这种情况下,您可能希望使用 ReLU 激活函数之类的东西来限制您的输出域。

ReLU 激活需要添加到模型的最后一层。如果您将它添加到中间层而不是最后一层,那么您的模型仍然可以输出负数,例如在最后一层具有负权重的情况下。

请注意,这并不是一个真正的新想法。逻辑回归和我们在这里所做的事情之间有很强的相似之处。在这两种情况下,我们都希望限制可能的猜测,在您的情况下为非负数,在逻辑回归的情况下为 [0, 1]。