【网络裁剪】——通道剪枝问答/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

相关文章

MySQL中的MVCC底层原理解读

《MySQL中的MVCC底层原理解读》本文详细介绍了MySQL中的多版本并发控制(MVCC)机制,包括版本链、ReadView以及在不同事务隔离级别下MVCC的工作原理,通过一个具体的示例演示了在可重... 目录简介ReadView版本链演示过程总结简介MVCC(Multi-Version Concurr

关于Gateway路由匹配规则解读

《关于Gateway路由匹配规则解读》本文详细介绍了SpringCloudGateway的路由匹配规则,包括基本概念、常用属性、实际应用以及注意事项,路由匹配规则决定了请求如何被转发到目标服务,是Ga... 目录Gateway路由匹配规则一、基本概念二、常用属性三、实际应用四、注意事项总结Gateway路由

解读Redis秒杀优化方案(阻塞队列+基于Stream流的消息队列)

《解读Redis秒杀优化方案(阻塞队列+基于Stream流的消息队列)》该文章介绍了使用Redis的阻塞队列和Stream流的消息队列来优化秒杀系统的方案,通过将秒杀流程拆分为两条流水线,使用Redi... 目录Redis秒杀优化方案(阻塞队列+Stream流的消息队列)什么是消息队列?消费者组的工作方式每

5分钟获取deepseek api并搭建简易问答应用

《5分钟获取deepseekapi并搭建简易问答应用》本文主要介绍了5分钟获取deepseekapi并搭建简易问答应用,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需... 目录1、获取api2、获取base_url和chat_model3、配置模型参数方法一:终端中临时将加

解读静态资源访问static-locations和static-path-pattern

《解读静态资源访问static-locations和static-path-pattern》本文主要介绍了SpringBoot中静态资源的配置和访问方式,包括静态资源的默认前缀、默认地址、目录结构、访... 目录静态资源访问static-locations和static-path-pattern静态资源配置

MySQL中时区参数time_zone解读

《MySQL中时区参数time_zone解读》MySQL时区参数time_zone用于控制系统函数和字段的DEFAULTCURRENT_TIMESTAMP属性,修改时区可能会影响timestamp类型... 目录前言1.时区参数影响2.如何设置3.字段类型选择总结前言mysql 时区参数 time_zon

MySQL中的锁和MVCC机制解读

《MySQL中的锁和MVCC机制解读》MySQL事务、锁和MVCC机制是确保数据库操作原子性、一致性和隔离性的关键,事务必须遵循ACID原则,锁的类型包括表级锁、行级锁和意向锁,MVCC通过非锁定读和... 目录mysql的锁和MVCC机制事务的概念与ACID特性锁的类型及其工作机制锁的粒度与性能影响多版本

Redis过期键删除策略解读

《Redis过期键删除策略解读》Redis通过惰性删除策略和定期删除策略来管理过期键,惰性删除策略在键被访问时检查是否过期并删除,节省CPU开销但可能导致过期键滞留,定期删除策略定期扫描并删除过期键,... 目录1.Redis使用两种不同的策略来删除过期键,分别是惰性删除策略和定期删除策略1.1惰性删除策略

SSID究竟是什么? WiFi网络名称及工作方式解析

《SSID究竟是什么?WiFi网络名称及工作方式解析》SID可以看作是无线网络的名称,类似于有线网络中的网络名称或者路由器的名称,在无线网络中,设备通过SSID来识别和连接到特定的无线网络... 当提到 Wi-Fi 网络时,就避不开「SSID」这个术语。简单来说,SSID 就是 Wi-Fi 网络的名称。比如

Java实现任务管理器性能网络监控数据的方法详解

《Java实现任务管理器性能网络监控数据的方法详解》在现代操作系统中,任务管理器是一个非常重要的工具,用于监控和管理计算机的运行状态,包括CPU使用率、内存占用等,对于开发者和系统管理员来说,了解这些... 目录引言一、背景知识二、准备工作1. Maven依赖2. Gradle依赖三、代码实现四、代码详解五