Dropout判断可以抵抗过拟合的方法

在这里插入图片描述
在这里插入图片描述
在这里插入图片描述

Dropout
LR=0.5
model = Net()
mse_loss = nn.CrossEntropyLoss()
#定义优化器,设置正则化L2
optimizer=optim.SGD(model.parameters(),LR,weight_decay=0.001)

def train(): #调用一次,训练一个周期
    model.train()  # dropout 起作用
    for i,data in enumerate(train_loader):
        #获得一个批次的数据和标签
        inputs, labels = data
        #(64,10)
        out = model(inputs)
#         #把数据标签变成独热编码
#         #[64]-->[64,1]
#         labels = labels.reshape(-1,1)
#         #tensor.scatter(dim,index,src)
#         #dim:对哪个维度进行独热编码
#         #index:要将src中对用的值放到tensor中的哪个位置
#         #src:插入index的数值
#         #将label转为one_hot编码1-->[1,0,0,0,0,0,0,0,0,0]
#         one_hot = torch.zeros(inputs.shape[0],10).scatter(1,labels,1) #将1放到labels中的哪个位置
        #计算loss
        loss = mse_loss(out,labels)
        #梯度清零
        optimizer.zero_grad()
        #计算梯度
        loss.backward()
        #更新权值
        optimizer.step()
def test():
    #测试集准确率
    model.eval() #dropout不工作
    correct=0
    for i,data in enumerate(test_loader):
        inputs,labels = data
        out = model(inputs)
        _,predicted = torch.max(out,1)
        correct += (predicted==labels).sum()
    print("Test acc:{0}".format(correct.item()/len(test_dataset)))
    print(correct.item())
    print(len(test_dataset))
    #训练集准确率
    correct1=0
    for i,data in enumerate(train_loader):
        inputs,labels = data
        out = model(inputs)
        _,predicted = torch.max(out,1)
        correct1 += (predicted==labels).sum()
    print("Train acc:{0}".format(correct1.item()/len(train_dataset)))

Dropout:对比训练集和测试集的准确率,取差值;对比没有使用Dropout=0的差值。可以说明其可抵抗过拟合(差值越小越好)
正则化:可以抵抗过拟合。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值