【网络裁剪】——通道剪枝问答/code解读

2024-06-13 08:32

本文主要是介绍【网络裁剪】——通道剪枝问答/code解读,希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!

亮点:原理,code

论文和原理和参考上一篇博客:Learning Efficient Convolutional Networks through Network Slimming

  1. 通道裁剪在训练时需要做什么?

在训练的时候需要训练一个通道稀疏特性的模型,实现通道稀疏化需要将和一个通道有关联的所有输入和输出的连接都剪掉。

  1. 其如何训练一个通道稀疏的模型的?

利用BN层的缩放因子,引入缩放因子正则项之后,我们得到的模型中许多缩放因子都会趋于0。
在这里插入图片描述
code:

# ***********************稀疏训练(对BN层γ进行约束)**************************
def updateBN():for m in model.modules():if isinstance(m, nn.BatchNorm2d):if hasattr(m.weight, 'data'):m.weight.grad.data.add_(args.s * torch.sign(m.weight.data))  # L1正则optimizer.zero_grad()
loss.backward()# ***********************稀疏训练(对BN层γ进行约束)**************************
if args.sr:updateBN()  

可以看到只是在训练的时候增加了一个updateBN,该函数就是对batchnorm的权重做L1正则化,而L1正则化可以使batchnorm.weight更稀疏化,也就是weight有更多的0。这也就是channel剪枝的目的。

  1. 为什么L1正则化会产生一个稀疏化的模型
    参考自:l1正则与l2正则的特点是什么,各有什么优势?

L1-regularization 和 L2-regularization 便都是我们常用的正则项,两者公式的例子分别如下:
在这里插入图片描述
在这里插入图片描述 L1 正则项和 L2 正则项来进行求导,可得。
在这里插入图片描述
在这里插入图片描述
假设只有一个w1参数,画出L1,L2及其倒数的图:
在这里插入图片描述
在这里插入图片描述
于是会发现,在梯度更新时,不管 L1 的大小是多少(只要不是0)梯度都是1或者-1,所以每次更新时,它都是稳步向0前进。
在这里插入图片描述
而看 L2 的话,就会发现它的梯度会越靠近0,就变得越小。
在这里插入图片描述
也就是说加了 L1 正则的话基本上经过一定步数后很可能变为0,而 L2 几乎不可能,因为在值小的时候其梯度也会变小。于是也就造成了 L1 输出稀疏的特性。

所有上面的解释都是只有正则项时,那样会造成迭代一定的步数,权重为0.但是真实的是正则化只是一个补充项。让权重努力的向0靠拢
m.weight.grad.data.add_(args.s * torch.sign(m.weight.data)) # L1正则

  1. 裁剪后的模型需要微调吗?

原文的路线是可以有fine-tune的。
在这里插入图片描述
在cifar10这种小数据集上,不需要fine-tune效果也很好。

这篇关于【网络裁剪】——通道剪枝问答/code解读的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!



http://www.chinasem.cn/article/1056792

相关文章

Qt实现网络数据解析的方法总结

《Qt实现网络数据解析的方法总结》在Qt中解析网络数据通常涉及接收原始字节流,并将其转换为有意义的应用层数据,这篇文章为大家介绍了详细步骤和示例,感兴趣的小伙伴可以了解下... 目录1. 网络数据接收2. 缓冲区管理(处理粘包/拆包)3. 常见数据格式解析3.1 jsON解析3.2 XML解析3.3 自定义

SpringBoot中配置文件的加载顺序解读

《SpringBoot中配置文件的加载顺序解读》:本文主要介绍SpringBoot中配置文件的加载顺序,具有很好的参考价值,希望对大家有所帮助,如有错误或未考虑完全的地方,望不吝赐教... 目录SpringBoot配置文件的加载顺序1、命令⾏参数2、Java系统属性3、操作系统环境变量5、项目【外部】的ap

Android使用ImageView.ScaleType实现图片的缩放与裁剪功能

《Android使用ImageView.ScaleType实现图片的缩放与裁剪功能》ImageView是最常用的控件之一,它用于展示各种类型的图片,为了能够根据需求调整图片的显示效果,Android提... 目录什么是 ImageView.ScaleType?FIT_XYFIT_STARTFIT_CENTE

Mysql用户授权(GRANT)语法及示例解读

《Mysql用户授权(GRANT)语法及示例解读》:本文主要介绍Mysql用户授权(GRANT)语法及示例,具有很好的参考价值,希望对大家有所帮助,如有错误或未考虑完全的地方,望不吝赐教... 目录mysql用户授权(GRANT)语法授予用户权限语法GRANT语句中的<权限类型>的使用WITH GRANT

python3 gunicorn配置文件的用法解读

《python3gunicorn配置文件的用法解读》:本文主要介绍python3gunicorn配置文件的使用,具有很好的参考价值,希望对大家有所帮助,如有错误或未考虑完全的地方,望不吝赐教... 目录python3 gunicorn配置文件配置文件服务启动、重启、关闭启动重启关闭总结python3 gun

关于pandas的read_csv方法使用解读

《关于pandas的read_csv方法使用解读》:本文主要介绍关于pandas的read_csv方法使用,具有很好的参考价值,希望对大家有所帮助,如有错误或未考虑完全的地方,望不吝赐教... 目录pandas的read_csv方法解读read_csv中的参数基本参数通用解析参数空值处理相关参数时间处理相关

Linux系统配置NAT网络模式的详细步骤(附图文)

《Linux系统配置NAT网络模式的详细步骤(附图文)》本文详细指导如何在VMware环境下配置NAT网络模式,包括设置主机和虚拟机的IP地址、网关,以及针对Linux和Windows系统的具体步骤,... 目录一、配置NAT网络模式二、设置虚拟机交换机网关2.1 打开虚拟机2.2 管理员授权2.3 设置子

揭秘Python Socket网络编程的7种硬核用法

《揭秘PythonSocket网络编程的7种硬核用法》Socket不仅能做聊天室,还能干一大堆硬核操作,这篇文章就带大家看看Python网络编程的7种超实用玩法,感兴趣的小伙伴可以跟随小编一起... 目录1.端口扫描器:探测开放端口2.简易 HTTP 服务器:10 秒搭个网页3.局域网游戏:多人联机对战4.

java之Objects.nonNull用法代码解读

《java之Objects.nonNull用法代码解读》:本文主要介绍java之Objects.nonNull用法代码,具有很好的参考价值,希望对大家有所帮助,如有错误或未考虑完全的地方,望不吝赐... 目录Java之Objects.nonwww.chinasem.cnNull用法代码Objects.nonN

SpringBoot使用OkHttp完成高效网络请求详解

《SpringBoot使用OkHttp完成高效网络请求详解》OkHttp是一个高效的HTTP客户端,支持同步和异步请求,且具备自动处理cookie、缓存和连接池等高级功能,下面我们来看看SpringB... 目录一、OkHttp 简介二、在 Spring Boot 中集成 OkHttp三、封装 OkHttp