通道剪枝channel pruning

news2024/9/27 17:32:29

1、相关定义

  • 过参数化:主要是指在训练阶段,在数学上需要进行大量的微分求解,去捕捉数据中微小的变化信息,一旦完成迭代式的训练之后,网络模型在推理的时候就不需要这么多参数。
  • 剪枝算法:核心思想就是减少网络模型中参数量和计算量,同时尽量保证模型的性能不受影响。

2、剪枝步骤

对模型进行剪枝常用的三种方法:
(1)训练好一个模型-》对模型进行剪枝-》对剪枝后的模型进行微调
(2)在模型训练过程中进行剪枝-》剪枝后模型进行微调
(3)进行剪枝-》从头训练剪枝后模型
训练-》剪枝-》微调

非结构化剪枝
主要对一些独立的权重或者神经元进行剪枝,是粒度最小的剪枝。
最简单的方法是预定义一个阈值,低于这个阈值的权重被减去,高于的被保留。所存在的三个主要缺点:
1.阈值与稀疏性没有直接联系
2.不同的层应该具有不同的灵敏度
3.这样设置阈值可能会剪掉太多信息,无法恢复原来的精度
优点:剪枝算法简单、模型压缩比高
缺点:精度不可控,剪枝后权重矩阵稀疏,没有专用硬件难以实现压缩和加速的效果
结构化剪枝
结构化的剪枝是有规律、有顺序的。对神经网络,或者计算图进行剪枝,经典对layer剪枝,channel剪枝以及对filter剪枝,剪枝粒度依次增大。
优点:大部分算法保留原始卷积结构,不需要专用硬件就可以实现
缺点:剪枝算法相对复杂

软剪枝
硬剪枝

3、什么是通道剪枝

论文:Channel Pruning for Accelerating Very Deep Neural Networks
论文链接:https://arxiv.org/abs/1707.06168
代码地址:https://github.com/yihui-he/channel-pruning
这是一篇ICCV2017的文章,关于用通道剪枝channel pruning来做模型加速,通道剪枝是模型压缩和加速领域的一个重要分支。

文章的核心内容是对训练好的模型进行通道剪枝,其通过迭代两部操作进行:
(1)channel selection
这一步采用LASSO regression来进行的,通过添加一个L1范数来约束权重,因为L1范数可以使得权重中大部分值为0,所以能够使得权重更加稀疏。这样就能够把稀疏的channel剪掉;
(2)reconstruction
这一步是基于linear least squares也就是最小二乘来约束剪枝后输出的feature map要尽可能和剪枝前的输出feature map相等,也就是最小二乘值越小越好。

本文采用的通道剪枝(channel pruning)是模型压缩和加速领域中一种简化网络结构的操作,文中作者还列举了其他两种常见的简化网络结构的操作:sparse connection和tensor factorization,可以看Figure1的对比。
(a)表示传统的3层卷积操作。
(b)表示sparse connection,这是通过去掉一些参数很小的连接得到的,理论上是有明显的加速效果的,但是在实现过程中并不容易,主要因为稀疏连接层的形状不规则。
(c)表示tensor factorization,比如SVD分解,但是这种操作其实并不会减少channel数量,因此很难带来明显加速。
(d)就是通道剪枝(channel pruning),也就是直接对channel做剪枝,移除掉一些冗余的channel,相当于给网络结构瘦身,而且各个卷积层的形状还比较统一。
在这里插入图片描述
图2是本文对于卷积层做通道剪枝的一个示意图,
通过左边大的虚线框,其中

  • 字母B表示输入feature map,同时c表示B的通道数量;
  • 字母W表示卷积核,卷积核的数量是n,每个卷积核的维度是ckhkw,kh和kw表示卷积核的size;
  • 字母C表示输出feature map,通道数是n
    因此通道剪枝的目的是要把B中的某些通道剪掉,使得剪掉后的B和W的卷积结果能尽可能和C接近。
    要剪掉B中的一些feature map的通道时,相当于剪掉了W中与这些通道对应的卷积核(对应W中3个最小的立方体块),这也是后面要介绍的公式中β的含义和之所以用L1范数来约束β的原因,因为L1范数会使得W更加稀疏。另外生成这些被剪掉通道的feature map的卷积核也可以删掉(对应Figure2中第二列的6个长条矩形块中的2个黑色虚线框的矩形块)。
    在这里插入图片描述
    参考:
    https://zhuanlan.zhihu.com/p/609126518
    https://blog.csdn.net/librahfacebook/article/details/97552163

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/1073960.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

【【萌新的SOC学习之小水文系列】】

萌新的SOC学习之小水文系列 SD卡读写TXT文本实验 SD 卡共有 9 个引脚线,可工作在 SDIO 模式或者 SPI 模式。在 SDIO 模式下,共用到 CLK、CMD、DAT[3:0]六根信号线;在 SPI 模式下,共用到 CS(SDIO_DAT[3])、…

栅形状的影响及可靠性的优化

栅形状的影响 VD-MOSFET单元结构采用平面栅极拓扑结构,栅极电极位于半导体的平坦上表面。虽然在这种结构中,在平面结处会发生电场增强,但在栅极电极处不会发生电场增强,因为栅极电极的边缘与高度掺杂的N源区重叠。栅极电极的边缘被…

新能源+低代码:百数服务商新领域,跨行业结合所碰撞出的新火花

新能源行业的兴起主要是在最近几年,特别是“双碳”目标提出后,中国的新能源行业迎来了快速发展的阶段。在政策支持和资本加持下,各种新能源和绿色发展基金设立,以新能源为主体的新型电力系统也得到了深化改革,大力推动…

Qt中QTimer定时器的用法

Qt中提供了两种定时器的方式一种是使用Qt中的事件处理函数,另一种就是Qt中的定时器类QTimer。 使用QTimer类,需要创建一个QTimer类对象,然后调用其start()方法开启定时器,此后QTimer对象就会周期性的发出timeout()信号。 1.QTimer…

十五、异常(6)

本章概要 Try-With-Resources 用法 揭示细节 异常匹配 Try-With-Resources 用法 在考虑所有可能失败的方法时,找出放置所有 try-catch-finally 块的位置变得令人生畏。确保没有任何故障路径,使系统远离不稳定状态,这非常具有挑战性。 Inp…

Unity ToLua热更框架使用教程(1)

从本篇开始将为大家讲解ToLua在unity当中的使用教程。 Tolua的框架叫LuaFramework,首先附上下载链接: https://github.com/jarjin/LuaFramework_UGUI_V2 这个地址的是UGUI的。 下载完之后导入项目,首先,我们要先让这个项目跑起…

老卫带你学---Datagrip连接clickhouse

Datagrip连接clickhouse Datagrip是一个DB可视化特别方便的软件,因为一些业务需要采用clickhouse,然而在download相关driver的时候出现各种问题,于是整理一下方案 1.需要下载clickhouse-jdbc的jar包,可以直接在sonatype上去下载…

C# 人像卡通化

效果 项目 代码 using Microsoft.ML.OnnxRuntime; using Microsoft.ML.OnnxRuntime.Tensors; using OpenCvSharp; using System; using System.Collections.Generic; using System.Drawing; using System.Linq; using System.Threading.Tasks; using System.Windows.Forms;nam…

图像分割-Segment Anything实践

一、模型介绍 Segment Anything 模型是一种新的图像分割模型,它可以在不需要大量标注数据的情况下,对图像中的任何物体进行分割。这种方法可以帮助计算机视觉领域的研究人员和开发人员更轻松地训练模型,从而提高计算机视觉应用程序的性能。该…

超前预告 | 云原生?大模型?这届乌镇双态IT大会亮点有点多

石道旁的水面,轻轻泛着微光,几片墨绿缓缓飘下,荡起柔和的波纹,向对岸游去。这儿不似北方秋阳如火的躁动,这儿的秋色是安静的,里便是江南水乡乌镇…… 2023年,第六届双态IT乌镇用户大会将于10月…

不再为文件名大小写烦恼:批量转换,一招搞定

在电脑使用过程中,我们经常需要处理各种文件,有时需要对文件名进行大小写转换以符合特定要求或便于管理。手动修改不仅费时还容易出错,那么有没有一种方法可以批量转换文件名大小写呢?答案是肯定的,下面就为大家介绍如…

DC电源模块在电容滤波器上的设计

BOSHIDA DC电源模块在电容滤波器上的设计 DC电源模块在电容滤波器上的设计是电源管理系统中非常重要的一部分,其目的是为了确保电源输出电压的稳定性和纹波尽可能小。在设计中,需要考虑到电源负载的变化和变压器等电源配件的电磁干扰等因素。下面我们详细…

基于Java的民宿管理系统设计与实现(源码+lw+部署文档+讲解等)(民宿预约、民宿预订、民宿管理、酒店预约通用)

文章目录 前言具体实现截图论文参考详细视频演示代码参考源码获取 前言 💗博主介绍:✌全网粉丝10W,CSDN特邀作者、博客专家、CSDN新星计划导师、全栈领域优质创作者,博客之星、掘金/华为云/阿里云/InfoQ等平台优质作者、专注于Java、小程序技…

【数据结构】二叉树--堆排序

目录 一 降序(建小堆) 二 升序 (建大堆) ​三 优化(以升序为例) 四 TOP-K问题 一 降序(建小堆) void Swap(int* x, int* y) {int tmp *x;*x *y;*y tmp; }//降序 建小堆 void AdjustUp(int* a, int child) {int parent (child - 1) / 2;while (child > 0){if (a[chil…

(三)Apache log4net™ 手册 -演示

0、引言 在开始本文之前,推荐您首先阅读 Apache log4net™ 手册中有关 介绍 与 配置 的相关内容。本文将通过实践分别为您演示如何使用 Visual Studio 2022 在 .NET Framework 项目和 .NET 项目下配置并使用 Log4Net。 1、为 .NET Framework 项目配置 Log4Net 1.1…

day26--AJAX(axios使用,http协议(部分),接口文档,form-serialize使用)

目录 AJAX介绍: 什么是AJAX 怎么用AJAX? axios的使用: axios的核心配置: url统一资源定位符: 组成: http协议: 域名: 资源路径: 查询参数: 常用的…

Text embedding 模型总结

文章目录 MTEB榜单8个嵌入任务三种数据集类别 C_METB榜单文本向量表示模型 目前,随着 Langchain LLM模型 的火热,除了层出不穷的大模型外,因为检索的能力会很大程度影响最终的问答效果,文本的嵌入模型也是大家比较关注的。本文主…

Redis之主从复制,哨兵模式,集群

Redis之主从复制,哨兵模式,集群 1、主从复制1.1主从复制概述1.2Redis主从复制作用1.3Redis主从复制流程1.4部署Redis 主从复制 2、哨兵模式2.1哨兵模式原理2.2哨兵模式的作用2.3哨兵模式的结构2.4故障转移机制2.5搭建Redis 哨兵模式 3、Redis集群模式3.1…

在开发APP过程中外包我们经常会遇到哪些问题?我们该如何避免?

虽然选择一个外包公司有很多坑,但是我们有的时候不得不选择一个外包公司,所以选择外包的时候我们要注意一些细节可以有效的区分开外包app产品的可靠性还是至关重要!希望我整理的这些对各位有需要的同学有所帮助! 首先我们先从公司…

看好你家电视盒的后门!数千个Android电视盒感染了与欺诈相关的危险恶意软件

如果你从Android电视盒获得流媒体修复程序,则你的设备可能会被恶意软件所感染,这些恶意软件能够进行广告欺诈、创建假帐户,并通过悄悄地将你的数据转移到中国的服务器来销售对家庭网络的访问。 根据本周的一份新报告,网络安全公司…