我有一个简单的线性回归模型,其中的自变量是年份(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 优化器