过拟合处理方法
- 增加数据集
这是我用三阶函数拟合,但是只给定两个数据训练。可以看出来拟合不好,特点是train的loss能降下去,但是test效果不好。解决方法之一是增加数据集
我将数据集增加到4个:
效果好了一些
增加到6个:
已经差不多了,最后我增加到8个:
可以看得出来,拟合得很好了。
- 权重衰减
n_train, n_test, num_inputs = 20, 100, 200
true_w, true_b = torch.ones(num_inputs, 1) * 0.01, 0.05
features = torch.randn((n_train + n_test, num_inputs))
labels = torch.matmul(features, true_w) + true_b
labels += torch.tensor(np.random.normal(0, 0.01, size=labels.size()), dtype=torch.float)
train_features, test_features = features[:n_train, :], features[n_train:, :]
train_labels, test_labels = labels[:n_train], labels[n_train:]
数据是设置的200个特征,train_data 20个,test_data 100个。
将lambd设置为0,即不使用L2范数正则化,可以看到过拟合了。
将lambd设置为3,可以看到拟合效果好了一些。
设置到30
应该已经是到达极限了。
- 丢弃法(dropout)
测试结果:
加入dropout层:
未加入dropout层:
从结果上面看其实差不多,加入dropout略有提升。