- 什么是过拟合
过拟合,简单讲就是对过度符合训练数据,比如二维空间中拟合出的一条曲线保证了所有的训练点都在曲线上,效果就像下图所示
但是这并不一定是好的,这样训练出来的模型,只能说模型很好的符合了训练数据,并不代表模型就抓住了数据的变化趋势,在训练数据上,不一定就有好的表现。
在神经网络中,深度层次与多节点有其必要性,但是过多的节点就容易导致过拟合,Pytorch提供了解决Dropout()函数来防止多拟合
Dropout§函数的机制是在当前层计算时,随机舍去p(p属于[0,1))比例的节点数据,以此来减弱网络对某些数据的过度依赖
- 关键代码
net_dropped = torch.nn.Sequential(
torch.nn.Linear(1, N_HIDDEN),
torch.nn.Dropout(0.5), # drop 50% of the neuron
torch.nn.ReLU(),
torch.nn.Linear(N_HIDDEN, N_HIDDEN),
torch.nn.Dropout(0.5), # drop 50% of the neuron
torch.nn.ReLU(),
torch.nn.Linear(N_HIDDEN, 1),
)
应当注意Dropout非必须选项,而且具体drop多少还应该视具体的数据而定,需要根据具体情况进行调参
Dropout操作的理想情况是在训练数据上可能并不会达到较高的准确率,但在训练数据上会获得比不进行Dropout较好的效果(我图中所示的数据并没有到达这个效果。。)