通道剪枝channel pruning

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.mzph.cn/news/99454.shtml

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

相关文章

基于DBC Signal Group生成Autosar SR接口(1)

文章目录 前言实现方法结构体在Simulink中的定义SignalGroup提取 总结 前言 在开发Autosar CAN通信模块时,对于Signal Group需要建立对应的Interface,其中的数据类型实际是一个结构体,包含Group中的Signal的数据类型定义。手动建立比较费时间&#xff0…

系统架构设计:8 论软件架构风格

目录 一 软件架构风格 1 数据流风格 (1)批处理风格 (2)管道-过滤器风格

C++中使用引用避免内存复制

C中使用引用避免内存复制 引用让您能够访问相应变量所在的内存单元,这使得编写函数时引用很有用。典型的函数声明类似于下面这样: ReturnType DoSomething(Type parameter);调用函数 DoSomething() 的代码类似于下面这样: ReturnType Resu…

基于OpenCV设计的流媒体播放器(RTSP、RTMP)

一、前言 随着互联网的普及和发展,流媒体技术已成为日常生活中不可或缺的一部分。流媒体播放器作为流媒体技术的重要组成部分,其性能和功能直接影响到用户的观影体验。本文介绍使用OpenCV和Qt设计一款流媒体播放器,专门用于播放直播视频流,例如RTSP、RTMP。该播放器只播放…

项目进展(十)-解决ADS1285在调试时出现的问题

一、解决大坑 在项目进展(九)-完善ADS1285代码这边博客中,看似解决了问题,可以去读数据,但是其实是给自己挖大坑,这边博客就是来填坑的。   首先呢,上篇博客说的是用0x12指令来读取数据&#…

Transformer模型 | Python实现TransformerCPI模型(pytorch)

文章目录 效果一览文章概述程序设计参考资料效果一览 文章概述 Python实现TransformerCPI模型(tensorflow) Dependencies: python 3.6 pytorch >= 1.2.0 numpy RDkit = 2019.03.3.0 pandas Gensim >=3.4.0 程序设计 import torch import numpy as np import random …

Qt QList类和QLinkedList类 详解

一、QList 类 对于不同的数据类型&#xff0c;QList<T>采取不同的存储策略&#xff0c;存储策略如下&#xff1a; 如果T 是一个指针类型或指针大小的基本类型(该基本类型占有的字节数和指针类型占有的字节数相同)&#xff0c;QList<T>将数值直接存储在它的数组当…

WPF中, 如何将控件的触发事件绑定到ViewModel

在DataGrid 等控件中, 有很多这种带闪电符号的触发事件. 如果用传统的事件驱动, 则直接在后台中建立 一个private PropertyChanged(Sender s, EventAgars Args) 即可. 但是如果需要绑定到ViewModel的话? 应该怎么做? 带闪电符号的触发事件 实现viewModel绑定前端触发事件的…

day58:ARMday5,GPIO流水灯实验

汇编指令&#xff1a; .text .global _start _start: 1.设置GPIOE GPIOF寄存器的时钟使能 RCC_MP_AHB4ENSETR[5:4]->1 0x50000a28 LDR R0,0x50000a28 LDR R1,[R0] ORR R1,R1,#(0x3<<4) STR R1,[R0]2.设置PE10、PF10、PE8管脚为输出模式&#xff0c;GPIOE_MODER[21…

常见SQL错误用法案例和总结

1. LIMIT 语句 分页查询是最常用的场景之一&#xff0c;但也通常也是最容易出问题的地方。比如对于下面简单的语句&#xff0c;一般DBA想到的办法是在type, name, create_time字段上加组合索引。这样条件排序都能有效的利用到索引&#xff0c;性能迅速提升。 SELECT * FROM …

Jenkins+Allure+Pytest的持续集成

一、配置 allure 环境变量 1、下载 allure是一个命令行工具&#xff0c;可以去 github 下载最新版&#xff1a;https://github.com/allure-framework/allure2/releases 2、解压到本地 3、配置环境变量 复制路径如&#xff1a;F:\allure-2.13.7\bin 环境变量、Path、添加 F:\a…

华为C语言编程规范(2W字总结)

1、代码总体原则 1、清晰第一 清晰性是易于维护、易于重构的程序必需具备的特征。代码首先是给人读的&#xff0c;好的代码应当可以像文章一样发声朗诵出来。 目前软件维护期成本占整个生命周期成本的40%~90%。根据业界经验&#xff0c;维护期变更代码的成本&#xff0c;小型…

全栈开发笔记1:首个项目的收获

本文为编程导航实战项目学习笔记。 文章目录 7.跨域问题解决 2023.10.26.项目部署 2023.10.15.统一处理返回值 2023.10.14.开发注册和用户管理 2023.09303.开发登陆注册接口 2023.09.172.数据库设计1.前后端初始化 2023.9.16 7.跨域问题解决 2023.10.2 三种方式&#xff1a; …

用c语言实现静态通讯录

思路&#xff1a; 将代码分成三个模块&#xff0c;头文件contact.h&#xff1a;声明函数&#xff0c;定义结构体 test.c测试类&#xff0c;contact.c用来实现通讯录中的函数功能 1.打印菜单&#xff0c;让用户进行选择 2.定义一个结构体PeoInfo&#xff0c;其中包含联系人的…

OCR让点读笔如虎添翼

点读笔是一种智能学习工具&#xff0c;它可以通过识别文字来提供相应的语音或图像反馈。在实现文字识别功能时&#xff0c;点读笔通常会借助OCR&#xff08;Optical Character Recognition&#xff0c;光学字符识别&#xff09;技术。下面将详细介绍点读笔如何利用OCR技术实现文…

【Spring Cloud系统】- Zookeer特性与使用场景

【Spring Cloud系统】- Zookeer特性与使用场景 一、概述 Zookeeper是一个分布式服务框架&#xff0c;是Apache Hadoop的一个子项目&#xff0c;它主要是用来解决分布式应用中经常遇到的一些数据管理问题。如&#xff1a;统一命名服务、状态同步服务、集群管理、分布式应用配置…

Python的logging模块Demo

Tip&#xff1a;默认情况下&#xff0c;logging模块不会自动地将日志存储到某个特定路径&#xff0c;除非你指定了该路径。你需要创建一个FileHandler&#xff0c;然后为其设置一个文件路径&#xff0c;这样日志就会被写入到该文件中。 以下是一个简单的例子&#xff0c;展示如…

Android开发入门技能(Java)

Android开发入门技能 一些流行的框架和库 安卓开发中有许多主流框架和库&#xff0c;它们可以帮助开发者更轻松地构建功能强大、高效和可维护的应用程序。以下是一些主要的安卓开发框架和库&#xff1a; Android Jetpack&#xff1a;Android Jetpack是官方提供的一套库和工具…

基于AlexNet深度学习网络的智能垃圾分类系统matlab仿真

目录 1.算法运行效果图预览 2.算法运行软件版本 3.部分核心程序 4.算法理论概述 4.1、基于AlexNet深度学习网络的智能垃圾分类系统概述 4.2、基于AlexNet深度学习网络的智能垃圾分类系统主要原理 5.算法完整程序工程 1.算法运行效果图预览 2.算法运行软件版本 matlab20…

【CSS】Tailwind CSS

直接参考 Tailwind CSS 安装提供了四种方式。因为我常用构建工具搭建项目&#xff0c;所以选择 Using PostCSS 。 其中 tailwind.config.js 的配置可以改为&#xff1a; module.exports {content: [./index.html, ./src/**/*.{vue,js,ts,jsx,tsx}],theme: {extend: {},},pl…