首页 > 解决方案 > 简单的神经网络拒绝过拟合

问题描述

我写了这段超级简单的代码

model = Sequential()
model.add(Dense(1, input_dim=d, activation='linear'))

model.compile(loss='mse', optimizer='adam')
model.fit(X_train, y_train, epochs=10000, batch_size=n)
test_mse = model.evaluate(X_test, y_test)
print('test mse is {}'.format(test_mse))

X_train 是一个n by dnumpy 矩阵,y 是一个n by 1numpy 矩阵。这基本上是你能想到的最简单的线性神经网络。一层,输入维度为d,我们输出一个数字。

它只是拒绝过度拟合。即使在运行了大量的迭代(如您所见为 10k)之后,训练损失也在 0.17 左右。

我预计损失为零。我为什么这么期待?因为在我的情况下,d 远大于 n。我有更多的自由度。作为进一步的证据,当我实际X_train @ w = y_train使用 numpy.linalg.lstsq 求解时, 的最大值大约X_train @ w - y是 10 到 -14。

所以这个系统肯定是可以解决的。我希望看到零损失或非常接近零损失,但我没有。为什么?

标签: pythonnumpymachine-learningkeras

解决方案


推荐阅读