深度神经网络剪枝算法基础理论

非结构化剪枝可获得更高的剪枝率与精度,但是其非结构化特征带来的随机连接使得往往需要专门的软、硬件设计来支持其推理加速,而在现有的边缘硬件上难以满足其应用条件。鉴于此,目前在剪枝领域的研究多集中在结构化剪枝上,如图1.11中所示,右侧三列均属于结构化剪枝的范畴,区别仅在于所选择的剪枝粒度不同。

在本文的研究中主要关注的是卷积核(Filter)剪枝,在一些工作中将与卷积核剪枝有同样效果的剪枝粒度称为通道(Channel)剪枝,两者的区别在于剪枝时所选用的评估指标不同,但剪枝之后最终呈现的效果依然是相同的。例如卷积核剪枝是直接评估卷积层中卷积核的重要性程度,随后剪去筛选出的不重要卷积核以及对应该卷积核的通道;而通道剪枝则是先根据某一评估指标筛选出不重要的通道,再剪去该不重要通道对应的卷积核,例如[103]、[105]以及[107]等工作均属于该类型。卷积核剪枝与Kernel剪枝也同样有联系,如前所述,卷积核剪枝首先会筛选出当前层中不同要的卷积核,随后剪枝,但需要注意到,该层的卷积核剪枝还会影响到下一层的卷积核中的Kernel,因为下一层卷积核的Kernel数是与上一层的输出通道数对应的,两者需要同时改变。

在结构化剪枝方案中,根据评估指标来源所划分的两类剪枝方法,即参数驱动的与数据驱动的方法,鉴于数据驱动的剪枝方案多依赖于训练数据,并根据不同的输入数据计算对应的梯度或损失值等来作为评估依据,相较于参数驱动的方法往往存在更多的计算;同时,参数驱动的方法大多从权值等模型自身数据特征的角度出发来衡量重要性,更符合在不同场景下的应用需求,因此本文研究的剪枝方法也属于参数驱动的剪枝方法。

上述关于评估指标的选择本质是在解决“怎么剪”的问题,而在确定评估指标后,则需求解决“剪多少”的问题。首选需要了解从全局与局部角度进行的剪枝方案划分,局部剪枝方案往往在同一层或同一模块内比较卷积核或通道的重要性;而全局剪枝从直接从整个模型的角度,来统一衡量重要性。两种方案中如何确定最终的剪枝结果,还与如何确定剪枝率的方法息息相关。例如在局部剪枝中,可以提前为所有待剪枝层设置一个固定的剪枝比例,也可以为每一层设置不同的剪枝比例,除了这种提前设置剪枝比例的,还可以根据稀疏后的实际情况,来计算剪枝比例;同样的,这些确定剪枝比例的方法均可应用在全局剪枝中。

待完成剪枝后,在多数剪枝方案中还需要进行微调来恢复模型的精度,但是往往恢复效果较差,或者需要长时间的微调才能得到较好的微调结果,但这种长时间的微调往往其实已经和重新训练并无区别了,因此如何缩短剪枝后的微调时间以及整个剪枝过程所需的时间都是需要优化的。综合上述关于结构化剪枝中的关键问题描述,可得到如图2.4所示的剪枝流程图,图中虚线表示可选。

 2.4  结构化剪枝经典流程图

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

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

相关文章

2023-07-08:RabbitMQ如何做到消息不丢失?

2023-07-08:RabbitMQ如何做到消息不丢失? 答案2023-07-08: 1.持久化 发送消息时设置delivery_mode属性为2,使消息被持久化保存到磁盘,即使RabbitMQ服务器宕机也能保证消息不丢失。同时,创建队列时设置du…

DRF+Vue.JS前后端分离项目实例(下) --- Vue.js 前端实现代码

本文上篇请 点击阅读 1. 需求说明 本文以学生信息查询功能为例,采用前后端分离架构,后端提供RESTFul 接口,前端代码用Vue.js Bottstrap实现。 1.1 本例要求提供如下查询功能: 列表查询、单条查询 添加学生信息 更改学生信息 删…

JDK,JRE,JVM的区别

1.JVM JVM,也叫java虚拟机,用来运行字节码文件,可将字节码翻译为机器码,JVM是实现java跨平台的关键,可以让相同的java代码在不同的操作系统上运行出相同的结果。 2.JRE JRE,也叫java运行时环境&#xff…

基于Spring Boot的社区适龄青年征兵系统设计与实现(Java+spring boot+MySQL)

获取源码或者论文请私信博主 演示视频: 基于Spring Boot的社区适龄青年征兵系统设计与实现(Javaspring bootMySQL) 使用技术: 前端:html css javascript jQuery ajax thymeleaf 后端:Java springboot框架 …

在工作与生活中保持情绪稳定的艺术

强烈的情绪波动:工作中的挑战 在我的职业生涯中,我经历过许多情绪波动的时刻。其中一个最具挑战性的时刻是在我负责一个重要项目的时候。我需要在短时间内完成大量的工作,同时还要管理一个由不同背景和技能的人组成的团队。这个项目的压力让…

flutter聊天界面-聊天列表 下拉加载更多历史消息

flutter聊天界面-聊天列表 下拉加载更多历史消息 在之前实现了flutter聊天界面的富文本展示内容、自定义表情键盘实现、加号【➕】更多展开相机、相册等操作Panel、消息气泡展示实现Flexible。这里把实现的聊天界面的滑动列表及下拉加载更多历史消息记录一下 聊天界面的列表使…

python与深度学习——基础环境搭建

一、安装jupyter notebook Jupyter Notebook是一个开源的交互式笔记本环境,可以用于编写和执行代码、创建可视化效果、展示数据分析结果等。我们在这里用它实现代码运行和观察运行结果。安装jupyter notebook实质上是安装Anaconda,后续还要在Anaconda Prompt中使用c…

QTday2

第一个界面头部的代码 #ifndef WIDGET_H #define WIDGET_H#include <QWidget> #include <QPushButton> #include<QLabel> #include<QIcon> #include<QLineEdit> #include<QDebug> class Widget : public QWidget {Q_OBJECTsignals:void j…

Unity:sentinel key not found (h0007)

SSD换电脑&#xff0c;unity 编辑器无法打开&#xff1b; 具体步骤&#xff1a; 删除这个路径下的文件 C:\ProgramData\SafeNet 下 Sentinel LDK 打开Windows 的Cmd 命令行&#xff0c;输入编辑器版本下Unity.exe的路径&#xff0c; CD E:\Dev_Env\Unity\Hub\Editor\2020.3.3…

Java Excel 打开文件报发现“xx.xlsx”中的部分内容有问题。是否让我们尽量尝试恢复问题解决

问题描述&#xff1a; 发现“文件.xlsx”中的部分内容有问题。是否让我们尽量尝试恢复&#xff1f; 问题分析&#xff1a; 1、后端的导出接口写的不对&#xff0c;又返回流数据&#xff0c;又返回响应体数据&#xff0c;导致前端将流数据和响应体数据都下载到了excel文件中。…

leetcode 106. 从中序与后序遍历序列构造二叉树

2023.7.8 让我很难受的一道题&#xff0c;个人感觉难度不止中等。 首先要知道的是知道了前序/后序 中序 之后&#xff0c;是可以构造出相应且唯一的二叉树的。 本道题的思路通过递归的方式根据中序遍历数组和后序遍历数组构建二叉树&#xff0c;并返回根节点。递归的结束条…

项目中期检查会议和进度对接

1.召开中期项目检查会议&#xff0c;与团队成员和博士王锟对接进度。对整体项目表示满意接受&#xff0c;指出重点需要修改提升和进一步开发完善的部分&#xff0c;以增强系统的完整度、功能亮点和界面数量点。具体为 ①注重“highlight”&#xff0c;即布局凸显主题功能&…