PYTORCH学习记录_防止过拟合

DropOut以及正则化

DropOut

DropOut是神经网络中一种防止过拟合的手段,其主要的原理是在每一次的训练过程中 放置几个神经元,不对进行训练,他的参数不会进行更新,但是在实际测试训练集的时候.所有的神经元都会被用到,

正则化

正则化同样是一种防止过拟合的手段, L1,L2两种模式进行,第一种是对所有的权值的绝对值进行加操作,L2则是对权值的平方进行加操作,Li会导致部分权值为0,L2会导致部分权值为捷径0.

代码修改如下

使用DropOut之后,模型修改如下:

class Net(nn.Module):
    def __init__(self):
        super(Net, self).__init__()
        #Sequential表示将不同的功能组合起来
        self.layer1 = nn.Sequential(nn.Linear(784, 500), nn.Dropout(p=0.5), nn.Tanh())  # Drop参数表示多少的神经元不工作
        self.layer2 = nn.Sequential(nn.Linear(500, 300), nn.Dropout(p=0.5), nn.Tanh())  # Drop参数表示多少的神经元不工作
        #上面是两个隐藏层
        self.layer3 = nn.Sequential(nn.Linear(300, 10), nn.Dropout(p=0.5), nn.Softmax(dim=1) )  # Drop参数表示多少的神经元不工作

    def forward(self,x):
        #数据输入是4维数据,[64, 1, 28, 28]->[64,784]
        x = x.view(x.size()[0], -1)  # 获得值64,view相当于reshape,第一个值为64,第二个值为-1相当于自动匹配
        x = self.layer1(x)
        x = self.layer2(x)
        x = self.layer3(x)
        return x

不使用DropOut,使用正则化,模型修改如下:

#设置L2正则化
optimizer = optim.SGD(model.parameters(),LR,weigth_decay=0.0001)

直接在优化器中使用即可.

©️2020 CSDN 皮肤主题: 1024 设计师:上身试试 返回首页