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)

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

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值