与Keras API的回归结果不一致

与Keras API的回归结果不一致,keras,deep-learning,neural-network,keras-layer,keras-2,Keras,Deep Learning,Neural Network,Keras Layer,Keras 2,我正在用两种方法对简单回归(一个自变量和一个目标变量)进行比较研究:-线性回归与神经网络(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) 注意

我正在用两种方法对简单回归(一个自变量和一个目标变量)进行比较研究:-线性回归与神经网络(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开始到(第40个纪元)0.06结束时,我也将RMSE视为0.22

这种Keras行为让我很难理解Keras API是否存在问题,或者我做错了什么,或者这个问题陈述不适合Keras

请您帮助我理解这个问题,以及稳定基于NN的解决方案的最佳方法是什么

其他一些信息:

  • 我的训练和测试数据总是固定的,所以没有数据被洗牌
  • 列车数据中的记录数=539
  • 测试数据中的记录数=154
  • 在训练和测试中也尝试了MinMaxScaling,但没有带来预测的稳定性

  • 我建议尝试其他激活功能而不是relu(比如sigmoid),看看会发生什么。理由:此外,您在NN中使用mae作为度量,但您优化了w.r.t mse。我建议尝试其他激活函数,而不是relu(如sigmoid),然后看看会发生什么。理由:此外,您在NN中使用mae作为度量,但您优化了w.r.t mse。