【发布时间】:2021-03-26 09:18:54
【问题描述】:
我正在以两种方式对简单回归(一个自变量和一个目标变量)进行比较研究:- 线性回归与神经网络(NN - Keras API)。我的样本数据如下:
x1 y
121.9114 121.856
121.856 121.4011
121.4011 121.3222
121.3222 121.9502
121.9502 122.0644
线性回归代码:
lr = LinearRegression()
lr.fit(X_train, y_train)
注意:LR 模型在每次后续运行中始终为我提供 RMSE 0.22。
NN 代码:
nn_model = models.Sequential()
nn_model.add(layers.Dense(2, input_dim=1, activation='relu'))
nn_model.add(layers.Dense(1))
nn_model.compile(optimizer='adam', loss='mse', metrics=['mae'])
nn_model.fit(X_train, y_train, epochs=40, batch_size=32)
训练损失:
Epoch 1/40 539/539 [==============================] - 0s 808us/sample - loss: 16835.0895 -
mean_absolute_error: 129.5276
Epoch 2/40 539/539 [==============================] - 0s 163us/sample - loss: 16830.6868 -
mean_absolute_error: 129.5106
Epoch 3/40 539/539 [==============================] - 0s 204us/sample - loss: 16826.2856 -
mean_absolute_error: 129.4935
...........................................
...........................................
Epoch 39/40 539/539 [==============================] - 0s 187us/sample - loss: 16668.3582 -
mean_absolute_error: 128.8823
Epoch 40/40 539/539 [==============================] - 0s 168us/sample - loss: 16663.9828 -
mean_absolute_error: 128.8654
基于 NN 的解决方案给我 RMSE = 136.7476
有趣的是,基于 NN 的解决方案在不同的运行中给出了不同的 RMSE,因为每次运行的训练损失看起来都不同。
例如,在第一次运行中,如上所示,损失从 16835 开始,第 40 个时期的最终损失为 16663。在这种情况下,模型给我 RMSE=136.74
如果我第二次运行相同的代码,则损失从 16144 开始,第 40 次迭代的最终损失为 5。在这种情况下,如果 RMSE 达到 7.3。
有时,当训练损失以 400 开始并以 0.06 结束(第 40 个时期)时,我也将 RMSE 视为 0.22。
这种 Keras 行为让我很难理解 Keras API 是否存在问题,或者我做错了什么,或者这个问题陈述不适合 Keras。
能否请您帮助我理解这个问题以及稳定基于 NN 的解决方案的最佳方法是什么?
一些附加信息:
- 我的训练和测试数据始终是固定的,因此没有数据被打乱。
- 训练数据中的记录数 = 539
- 测试数据中的记录数 = 154
- 也在训练和测试中尝试了 MinMaxScaling,但没有带来预测稳定性。
【问题讨论】:
-
我建议尝试其他激活函数而不是 relu(如 sigmoid),看看会发生什么。基本原理:stats.stackexchange.com/a/380928/214336 另外,您在 NN 中使用 mae 作为指标,但您优化了 w.r.t mse。
标签: keras deep-learning neural-network keras-layer keras-2