python - 简单的神经网络拒绝过拟合
问题描述
我写了这段超级简单的代码
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 d
numpy 矩阵,y 是一个n by 1
numpy 矩阵。这基本上是你能想到的最简单的线性神经网络。一层,输入维度为d,我们输出一个数字。
它只是拒绝过度拟合。即使在运行了大量的迭代(如您所见为 10k)之后,训练损失也在 0.17 左右。
我预计损失为零。我为什么这么期待?因为在我的情况下,d 远大于 n。我有更多的自由度。作为进一步的证据,当我实际X_train @ w = y_train
使用 numpy.linalg.lstsq 求解时, 的最大值大约X_train @ w - y
是 10 到 -14。
所以这个系统肯定是可以解决的。我希望看到零损失或非常接近零损失,但我没有。为什么?