转载PyTorch训练模型添加L1/L2正则化的两种实现方式_hlld__的博客-CSDN博客_pytorch添加正则化

在使用PyTorch训练模型时,可使用三种方式添加L1/L2正则化:一种是添加正则化项到损失函数中,另一种是在backward()之后,添加正则化项到参数变量的梯度中,然后再进行step(),一种是torch.optim优化器实现L2正则化

方式一:添加到损失函数

def l1_regularization(model, l1_alpha):l1_loss = []for module in model.modules():if type(module) is nn.BatchNorm2d:l1_loss.append(torch.abs(module.weight).sum())return l1_alpha * sum(l1_loss)def l2_regularization(model, l2_alpha):l2_loss = []for module in model.modules():if type(module) is nn.Conv2d:l2_loss.append((module.weight ** 2).sum() / 2.0)return l2_alpha * sum(l2_loss)

方式二:添加到参数梯度

backward()之后,添加正则化项到参数变量的梯度中,然后再进行step()。这种方式可以指定哪一层使用正则化。

loss=criterion(outputs,labels)
loss.backward()#反向传播求梯度
l1/l2正则化方法
optimizer.step()#更新参数
def l1_regularization(model, l1_alpha):for module in model.modules():if type(module) is nn.BatchNorm2d:module.weight.grad.data.add_(l1_alpha * torch.sign(module.weight.data))def l2_regularization(model, l2_alpha):for module in model.modules():if type(module) is nn.Conv2d:module.weight.grad.data.add_(l2_alpha * module.weight.data)

方式三:torch.optim优化器实现L2正则化

torch.optim集成了很多优化器,如SGD,Adadelta,Adam,Adagrad,RMSprop等,这些优化器自带的一个参数weight_decay,用于指定权值衰减率,相当于L2正则化中的λ参数,注意torch.optim集成的优化器只有L2正则化方法,weight_decay默认0.

optimizer = optim.Adam(model.parameters,lr=learning_rate,weight_decay=0.01)

l1、l2正则化在pytorch框架下的实现方式相关推荐

  1. 手推公式带你轻松理解L1/L2正则化

    文章目录 前言 L1/L2正则化原理 从数学的角度理解L1/L2正则化 从几何的角度理解L1/L2正则化 L1/L2正则化使用情形 前言 L1/L2正则化的目的是为了解决过拟合,因此我们先要明白什么是 ...

  2. 1.Pytorch框架下使用yolov3-tiny网络模型 训练自己的数据集

    在Pytorch框架下使用yolov3-tiny网络模型 ,训练自己的数据集 1.本文参考链接如下: https://blog.csdn.net/gbz3300255/article/details/ ...

  3. 31,32,33_过拟合、欠拟合的概念、L2正则化,Pytorch过拟合欠拟合,交叉验证-Train-Val-Test划分,划分训练集和测试集,K-fold,Regularization

    1.26.过拟合.欠拟合及其解决方案 1.26.1.过拟合.欠拟合的概念 1.26.1.1.训练误差和泛化误差 1.26.1.2.验证数据集与K-fold验证 1.26.1.3.过拟合和欠拟合 1.2 ...

  4. L0,L1,L2正则化浅析

    在机器学习的概念中,我们经常听到L0,L1,L2正则化,本文对这几种正则化做简单总结. 1.概念 L0正则化的值是模型参数中非零参数的个数. L1正则化表示各个参数绝对值之和. L2正则化标识各个参数 ...

  5. L1 L2正则化和优化器的weight_decay参数

    L1正则和L2正则的效果有什么差异?为什么? 角度一:解空间形状 通常认为L1 正则化可以产生稀疏权值矩阵,即产生一个参数稀疏的模型. 而L2 正则化可以让模型的参数取绝对值较小的数. 考虑两种正则化 ...

  6. L1,L2正则化分析

    1. 优化角度分析 1).L2正则化的优化角度分析 在限定的区域,找到使 最小的值. 图形表示为: 上图所示,红色实线是正则项区域的边界,蓝色实线是 的等高线,越靠里的等高圆, 越小,梯度的反方向是 ...

  7. L1 L2 正则化区别

    文章一 文章二 机器学习中,如果参数过多,模型过于复杂,容易造成过拟合(overfit).即模型在训练样本数据上表现的很好,但在实际测试样本上表现的较差,不具备良好的泛化能力.为了避免过拟合,最常用的 ...

  8. L1,L2正则化理解-奥卡姆剃刀(Occam's razor)原理

    L0.L1与L2范数转自:zouxy09@qq.com http://blog.csdn.net/zouxy09 今天我们聊聊机器学习中出现的非常频繁的问题:过拟合与规则化.我们先简单的来理解下常用的 ...

  9. 踩坑记录: Pytorch框架下--- 从零使用卷积神经网络实现人脸面部表情识别 (基于连续维度)

    之前一直在自学深度神经网络的知识,在跟着书本一步一步走的时候,感觉每一个思路,每一句代码都特别容易,实现思路清晰明了,实验代码简单易懂.但当我真正课题需要用到的时候,想跳出书本的框架,自行实现并通透其 ...

最新文章

  1. 【转】常用数据结构及复杂度
  2. java开根号函数_Java中真的只有值传递么?
  3. 用master-worker模型比对团队管理
  4. 机器学习,计算机视觉相关资料
  5. vulkan api_Vulkan开放标准API支持,针对Linux的新游戏以及更多游戏
  6. Java基础学习总结(44)——10个Java 8 Lambda表达式经典示例
  7. vue 插槽的版本变化1.x-2.6.0-3.x(详细)
  8. ec20 以太网_轩辕实验室:SOTIF:汽车以太网的容错能力测试(2)
  9. C# 添加windows右键菜单
  10. C++简易打字游戏(DEV可运行)
  11. winword.exe应用程序错误
  12. 前端如何进行seo优化
  13. Phaser3之 load
  14. mysql字段类型NUMC_全自动数字论证机(迫真)
  15. python安卓开发-一个Android开发者自学Python的心路历程
  16. html美食网站源码
  17. 策略模式和工厂模式的区别
  18. 二、 剖析Netty的工作机制之Buffer、Channel、Selector分析
  19. 数理逻辑 形式可推演与逻辑推论
  20. 朋友没有邀请码,也成功让我使用了Club House

热门文章

  1. 基于c语言的简单的mysql数据库操作
  2. pyecharsts 柱,饼,线,地图, Bar, Pie, Line, Map,改excel表头 地址 标题即用
  3. 扩充Ubuntu虚拟机的磁盘容量
  4. 从深交所2020年创新课题看券商的数智化布局
  5. android人脸识别 faceu,faceu
  6. 设计模式之装饰器模式(C++实现)
  7. 优化算法-BFGS(原理)
  8. 求三个数最大公约数算法
  9. matlab生成mif图像文件,matlab 生成mif文件导入quartus rom中
  10. 2023中国(上海)国际溴化工产业展览会