• 对L1,L2正则化和dropout的理解


    L1L2正则化

    L1,L2正则化目的是为了防止过拟合。为何会出现过拟合?答:权重过大。所以L1和L2正则化就是用来防止权重过大的。
    他们是怎么做的呢?
    很简单:我们优化参数都是通过最小化损失函数来优化,那么只要我通过某种策略把“防止权重过大”这个目的也加入到损失函数中就可以。
    L1正则化是这样做的:loss = 损失函数+权重的绝对值之和
    L2正则化是这样做的:loss = 损失函数+权重的平方和再开根号
    注意我们的目标是最小化loss。所以当权重过大时loss自然会很大,而优化算法会让loss变小自然会让权重变小。
    L1正则化pytorch实现

    regularization_loss = 0
    for param in model.parameters():
        regularization_loss += torch.sum(torch.abs(param))
    

    L2正则化pytorch优化器都帮我们实现了,只要weight_decay这个参数不为0即可。

    dropout

    这从名字就可以看出这个算法怎么做的。就是神经网络会在训练过程中会剔除一些边。这样就能防止过拟合

    def __init__(self):
            super(mnist_model, self).__init__()
            self.feats = nn.Sequential(
                nn.Conv2d(1, 32, 5, 1, 1),
                nn.MaxPool2d(2, 2),
                nn.ReLU(True),
                nn.BatchNorm2d(32),
    
                nn.Conv2d(32, 64, 3,  1, 1),
                nn.ReLU(True),
                nn.BatchNorm2d(64),
    
                nn.Conv2d(64, 64, 3,  1, 1),
                nn.MaxPool2d(2, 2),
                nn.ReLU(True),
                nn.BatchNorm2d(64),
    
                nn.Conv2d(64, 128, 3, 1, 1),
                nn.ReLU(True),
                nn.BatchNorm2d(128)
            )
    
            self.classifier = nn.Conv2d(128, 10, 1)
            self.avgpool = nn.AvgPool2d(6, 6)
            self.dropout = nn.Dropout(0.5) # 每条边剔除的概率是0.5
    
    
  • 相关阅读:
    datatables插件适用示例
    RabbitMQ三----'任务分发 '
    ftp上传下载
    运用JS导出ecxel表格、实现文件重命名
    浅谈MySQL索引背后的数据结构及算法【转】
    SQL语句导致性能问题
    由浅入深理解索引的实现【转】
    MySQL ACID及四种隔离级别的解释
    MyISAM引擎和InnoDB引擎的特点
    MySQL复制中slave延迟监控
  • 原文地址:https://www.cnblogs.com/ailitao/p/11787539.html
Copyright © 2020-2023  润新知