如果我不将输入数据居中,为什么我的线性回归模型会失败?
Why does my linear regression model fail if I don't center input data?
我有简单的线性回归模型,其中自变量是 年(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, # If we change this to `x - x.mean()` then we no longer get nan\inf loss
y,
epochs=200
)
Epoch 1/200
6/6 [==============================] - 0s 1ms/step - loss: inf
Epoch 2/200
6/6 [==============================] - 0s 1ms/step - loss: nan
Epoch 3/200
6/6 [==============================] - 0s 1ms/step - loss: nan
Epoch 4/200
6/6 [==============================] - 0s 1ms/step - loss: nan
.
.
.
我原以为模型会更慢或者可能不那么准确,但为什么它完全崩溃了?
编辑:this is what the data looks like
使用 ANN 进行回归有点棘手。你看到 nan 损失值是因为你的梯度爆炸了。那是因为 输出没有上限 。还有你为什么要使用动量?
你可以试试:
- 降低学习率
- 更改为 adam 优化器
我有简单的线性回归模型,其中自变量是 年(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, # If we change this to `x - x.mean()` then we no longer get nan\inf loss
y,
epochs=200
)
Epoch 1/200
6/6 [==============================] - 0s 1ms/step - loss: inf
Epoch 2/200
6/6 [==============================] - 0s 1ms/step - loss: nan
Epoch 3/200
6/6 [==============================] - 0s 1ms/step - loss: nan
Epoch 4/200
6/6 [==============================] - 0s 1ms/step - loss: nan
.
.
.
我原以为模型会更慢或者可能不那么准确,但为什么它完全崩溃了?
编辑:this is what the data looks like
使用 ANN 进行回归有点棘手。你看到 nan 损失值是因为你的梯度爆炸了。那是因为 输出没有上限 。还有你为什么要使用动量?
你可以试试:
- 降低学习率
- 更改为 adam 优化器