我有一个数据集,其中许多值非常相似(即:以与400和401非常相似的相同方式)。
出于测试目的,我正在尝试过度拟合数据。这是我的示例:
我正在使用0.01的学习率和0.01的学习率衰减。
使用数据时:
X = [[1245086781, -73.844311, 40.721319, -73.84161, 40.712278, 1],
[1.26270674e+09, -7.40160480e+01, 4.07113030e+01, -7.39792680e+01, 4.07820040e+01, 1.00000000e+00]]
Y = [[0.], [1.]]
注意相应的值几乎相同。在经过5000个周期之后,我最终损失了0.25,并且当预测第零个数据点时,给出的答案是0.5(当它应该为0时),第一个数据点给出了0.5(应该是1)。
使用数据时:
X = [[1245086781, -73.844311, 40.721319, -73.84161, 40.712278, 1],
[1.26270674e+09, -7.40160480e+01, 4.07113030e+01, 100000000, 4.07820040e+01, 1.00000000e+00]]
Y = [[0.], [1.]]
第一个数据点的第五个值已增加到一个荒谬的值,仅供参考。使用相同的网络和相同的纪元数,最终损失为0,当预测第零个数据点时,给定的答案为0(应为0),第一个数据点为1(应为1)。
在我看来,解决方案应该是改变学习速率和学习速率衰减,但是我找不到损失低于0.2的值的组合。这是我针对不同学习率和衰减的结果: 我该如何解决?
完整代码:
import tflearn
X = [[1245086781, -73.844311, 40.721319, -73.84161, 40.712278, 1],
[1.26270674e+09, -7.40160480e+01, 4.07113030e+01, -7.39792680e+01, 4.07820040e+01, 1.00000000e+00]]
Y = [[0.], [1.]]
r2 = tflearn.R2()
net = tflearn.input_data(shape=[None, len(X[0])])
net = tflearn.fully_connected(net, 100, activation='linear')
net = tflearn.fully_connected(net, 100, activation='linear')
net = tflearn.fully_connected(net, 1, activation='linear')
sgd = tflearn.SGD(learning_rate=0.01, lr_decay=0.01)
net = tflearn.regression(net, optimizer=sgd, loss='mean_square', metric=r2)
model = tflearn.DNN(net)
model.fit(X, Y, show_metric=True, n_epoch=5000)
print(model.predict([X[0]]))
print(model.predict([X[1]]))