为什么我的线性回归模型在不中心化输入数据时会失败?

我有一个简单的线性回归模型,其中的自变量是年份(1970年至今)。当我将输入数据围绕零中心化(即从x中减去均值)时,模型运行正常,并且我得到了最佳拟合线。但如果我不中心化数据,模型就会出现无限损失:

model = tf.keras.models.Sequential([    tf.keras.layers.Input(shape=(1,)),    tf.keras.layers.Dense(1)])model.compile(    tf.keras.optimizers.SGD(learning_rate=0.001, momentum=0.9),    loss='mse')model_history = model.fit(    x, # 如果我们将其更改为 `x - x.mean()`,则不会再出现 nan/inf 损失    y,    epochs=200)
Epoch 1/2006/6 [==============================] - 0s 1ms/step - loss: inf     Epoch 2/2006/6 [==============================] - 0s 1ms/step - loss: nanEpoch 3/2006/6 [==============================] - 0s 1ms/step - loss: nanEpoch 4/2006/6 [==============================] - 0s 1ms/step - loss: nan...

我原本预期模型会运行得更慢,或者可能不够精确,但为什么它会完全崩溃呢?

编辑:这是数据的外观


回答:

使用人工神经网络进行回归有点棘手。你看到 nan 损失值是因为你的梯度已经爆炸了。这是由于输出没有上限。另外,你为什么使用动量?

你可以尝试:

  • 降低学习率
  • 改用 adam 优化器

Related Posts

如何对SVC进行超参数调优?

已关闭。此问题需要更加聚焦。目前不接受回答。 想要改进…

如何在初始训练后向模型添加训练数据?

我想在我的scikit-learn模型已经训练完成后再…

使用Google Cloud Function并行运行带有不同用户参数的相同训练作业

我正在寻找一种方法来并行运行带有不同用户参数的相同训练…

加载Keras模型,TypeError: ‘module’ object is not callable

我已经在StackOverflow上搜索并阅读了文档,…

在计算KNN填补方法中特定列中NaN值的”距离平均值”时

当我从头开始实现KNN填补方法来处理缺失数据时,我遇到…

使用巨大的S3 CSV文件或直接从预处理的关系型或NoSQL数据库获取数据的机器学习训练/测试工作

已关闭。此问题需要更多细节或更清晰的说明。目前不接受回…

发表回复

您的邮箱地址不会被公开。 必填项已用 * 标注