模型剪枝-Network Slimming算法分析

代码见文末

论文地址:Learning Efficient Convolutional Networks through Network Slimming

ICCV 2017 Open Access Repository

1.概述

        由于边缘设备的限制,在模型的部署中经常受到模型大小、运行内存、计算量的限制。之前的方法要么只能解决其中一个问题,要么会带来精度损失。因此,论文提出能够使用BN层中的缩放因子γ实现对通道的剪枝,这种方法能够很好的解决三个问题,同时也不会带来过多的精度损失,也不需要进行额外的网络结构搜索。具体如下:

        在每层卷积中,有多个特征图,例如64个特征图。但是这64个特征图不一定都重要,保留其中重要的特征图,而将不重要的特征图剪枝掉,这就是模型剪枝。因此,首先我们需要给每个特征图一个权重因子,然后保留其中重要的特征图。 这个权重因子通过BN层中的缩放因子γ实现。

2.BN层的原理即实现

         归一化是数据预处理中的一个常见步骤,主要目的是调整数值型数据的尺度,使之落在一个特定的范围,如0到1或-1到1之间。这一步骤对于很多机器学习算法的性能至关重要,尤其是那些对变量尺度敏感的算法。其主要作用如下:

  • 促进算法效率:归一化通过将所有特征调整到相同的尺度,可以加快算法的收敛速度。特别是在使用基于梯度的优化算法时,归一化帮助保持梯度的稳定,从而加速学习过程。

  • 增强模型性能:归一化确保没有单个特征会因尺度大而对模型训练产生不成比例的影响,这有助于提升模型在测试数据上的表现和预测的准确性。

  • 避免数值问题:大的数值范围可能导致数值计算问题,如数值不稳定和溢出。归一化通过限制数据在一个固定范围内,帮助避免这些问题。

  • 对抗梯度消失和爆炸:在训练深层神经网络时,归一化帮助控制梯度的传播,减轻梯度消失和梯度爆炸的问题,这是通过维持各层激活值和梯度在适当范围内实现的。

  • 提高模型鲁棒性:归一化减少了模型对输入特征尺度的依赖,提高了模型对输入数据中的小变动或噪声的鲁棒性。

        BN主要在Batch维度进行归一化,在特征图中也就是B,H,W维度,LN在层(样本)维度进行归一化。卷积一般使用BN是因为卷积的特征映射方式在整个数据集上往往是统一的。利用BN在批次维度上对这些特征进行归一化,可以有效地减少不同批次数据分布的差异。而Transformer更加强调注意力,需要捕捉每个样本自身的依赖关系,因而常用LN。

        同时,BN能够有效地减轻内部协变量偏移(Internal Covariate Shift),加速训练过程。内部协变量偏移指的是由于上一层参数的更新,当前层的输入分布很可能发生了改变,而BN除了对整个Batch维度进行归一化以外,还包括了两个可学习的参数(缩放因子γ和偏移量\beta),以便网络能够恢复到原始的数据分布。

        对于每一个特征图,缩放因子γ越大,则很有可能特征图越重要,因此,我们基于缩放因子γ得到特征图的权重因子。

3.L1与L2正则化

        在实际情况中,缩放因子γ可能分布比较密集,因此,在训练时使用L1正则化对参数进行稀疏化,即让更多的权重因子接近于0。

        

        L1正则化往往具有稀疏化的作用,而L2正则化往往具有平滑化的作用。这是因为L1正则化的梯度保持恒定,最终会收敛到0,而L2正则化梯度会越来越小,收敛会越来越慢,收敛会接近于0。

         

4.整体流程         

        整体训练流程是首先正常训练,然后缩放因子γ进行l1正则化进行再训练,第三部使用尺度因子进行剪枝,最后,对剪枝后的模型再进行微调,微调后的性能甚至会超越原来的模型。

实验结果如下: 

链接:https://pan.baidu.com/s/12nhoFcZWLD1_ticGprawUg?pwd=iujk 
提取码:iujk  

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

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

nginxconfig.io项目nginx可视化配置--搭建-视频

项目地址 https://github.com/digitalocean/nginxconfig.io搭建视频 nginxconfig.io搭建 nginxconfig.io搭建 展示效果 找到这个项目需要的docker镜像,有项目需要的node的版本 docker pull node:20-alpine运行这个node容器,在主机中挂载一个文件夹到容器中 主机&a…

PyVista 3D数据可视化 Python 库 简介 含源码

Pyvista是一个用于科学可视化和分析的Python库 ;我认为它适合做一些网格数据的处理; 它封装了VTK(Visualization Toolkit)之上,提供了一些高级接口, 3D数据可视化变得更加简单和易用。 1.安装 pyvista&…

windows ubuntu sed,awk,grep篇:10.awk 变量的操作符

目录 62. 变量 64. 算术操作符 65. 字符串操作符 66. 赋值操作符 67. 比较操作符 68. 正则表达式操作符 62. 变量 Awk 变量以字母开头,后续字符可以是数字、字母、或下划线。关键字不能用作 awk 变量。 不像其他编程语言, awk 变量可以直接使…

回溯法——(1)装载问题(C语言讲解)

目录 一、装载问题 1.问题概括: 2.解决方案(思路): 3.图片讲解(超详细): 4.代码分析: 二、算法改进:引入上界函数 1.问题概念: 2.图片讲解&#xff1a…

无人机+低空经济:释放中国低空经济动力的必要条件

无人机与低空经济的结合,对于释放中国低空经济动力具有重要的意义。无人机作为低空经济的重要组成部分,可以为低空经济提供新的动力和发展方向。以下是无人机与低空经济结合释放中国低空经济动力的必要条件: 1. 无人机技术的不断发展和创新&a…

day7 c++

整理代码 1、unique_ptr 指针 #include <iostream> #include <memory> using namespace std; class Demo {public:Demo(){cout<<"无参构造"<<endl;}~Demo(){cout<<"Demo的析构函数"<<endl;} };int main() {//unique…

翻译《The Old New Thing》 - How do I cover the taskbar with a fullscreen window?

How do I cover the taskbar with a fullscreen window? - The Old New Thing (microsoft.com)https://devblogs.microsoft.com/oldnewthing/20050505-04/?p35703 Raymond Chen 2005年5月5日 如何用全屏窗口覆盖任务栏&#xff1f; 很多时候&#xff0c;人们总是想得太多。…

Codeforces Round 942 (Div. 2) ----- A ----- F --- 题解

前情提要&#xff1a;因为数学水平原因&#xff0c;没法给出e的证明&#xff0c;因为我也是举例归类得出的结论&#xff0c;但是按理来说应该可以利用生成数函数证明 f题也是因为数学原因加上水平有限&#xff0c;我的理解可能有偏差。 目录 A. Contest Proposal&#xff1a…

【机器学习】基于扩散模型的文本到音频生成:突破数据局限,优化音频概念与实践顺序

基于扩散模型的文本到音频生成&#xff1a;突破数据局限&#xff0c;优化音频概念与时间顺序 一、现有模型的局限与挑战二、偏好数据集的构建与利用三、Diffusion-DPO损失的应用与模型微调四、实例与代码展示五、总结与展望 随着数字化技术的迅猛发展&#xff0c;音乐和电影行业…

表格中斜线的处理

此处的斜线,不是用表格写的,但是也适用于表格,只是需要更改表格的样式,可以 按照如下处理,即可 呈现的效果:如图所示 template部分: <div class"header_detail custom"><div class"right">节次</div><div class"left">…

操作DOM:性能优化之道

&#x1f90d; 前端开发工程师、技术日更博主、已过CET6 &#x1f368; 阿珊和她的猫_CSDN博客专家、23年度博客之星前端领域TOP1 &#x1f560; 牛客高级专题作者、打造专栏《前端面试必备》 、《2024面试高频手撕题》 &#x1f35a; 蓝桥云课签约作者、上架课程《Vue.js 和 E…

PhpAdmin-getshell

PhpAdmin-getshell 通过未授权成功写入&#xff0c;然后getshell 路径&#xff1a;C:\phpstudy_pro\Extensions\MySQL5.7.26\ 写入木马&#xff1a; into写入文件&#xff1a; 使用需看要secure_file_priv的值。 当value为“null”时&#xff0c;不允许读取任意文件 当value为…

Odoo14修改登录界面,实现炫酷粒子效果

目录 原登录界面 最终效果 实现步骤 插件下载 原登录界面 最终效果 实现步骤 1 odoo创建插件web_login 2 在static目录下编写css和js文件

排序-八大排序FollowUp

FollowUp 1.插入排序 (1).直接插入排序 时间复杂度:最坏情况下:0(n^2) 最好情况下:0(n)当数据越有序 排序越快 适用于: 待排序序列 已经基本上趋于有序了! 空间复杂度:0(1) 稳定性:稳定的 public static void insertSort(int[] array){for (int i 1; i < array.length; i…

早期明牌空投Sanctum【大羊毛必薅】

Season 1 第一季 早期 Sanctum指南&#xff1a;https://sanc.tm/w?refH0IEGW邀请&#xff1a;H0IEGW 感觉和kmno一个实时积分系统的&#xff01; 直接用SOL换成Infinity&#xff0c; 然后过一会就会实时更新积分&#xff01;很简单&#xff01; 投资方Dragonfly比较牛逼。

linux dma的使用

设备树配置 驱动代码 static void bcm2835_dma_init(struct spi_master *master, struct device *dev) { struct dma_slave_config slave_config; const __be32 *addr; dma_addr_t dma_reg_base; int ret; /* base address in dma-space */ addr of_get_address(master->de…

MySQL —— 库的基本操作

一、数据库的增删查改 &#xff08;1&#xff09;创建 语句&#xff1a;create database db_name;&#xff08;db_name是自定义的数据库名字&#xff09; &#xff08;2&#xff09;删除 语句&#xff1a;drop database dp_name;&#xff08;dp_name是要被删除的数据库的名字…

谷粒商城实战(021 业务-订单模块-页面设计)

Java项目《谷粒商城》架构师级Java项目实战&#xff0c;对标阿里P6-P7&#xff0c;全网最强 总时长 104:45:00 共408P 此文章包含第262p-第p266的内容 介绍 所需的页面 设计页面 新增域名 路径带/static的都到/usr/share/nginx/html文件夹下去找 其他动态请求的都负载…

第12章 软件测试基础(第三部分)测试类型

七、测试类型&#xff08;按工程阶段划分&#xff09; 单集系确收 &#xff08;一&#xff09;单元测试 1、单元测试/模块测试 单元就是软件中最小单位&#xff08;或模块&#xff09;。可以是一个函数、一个过程、一个类。主要依据是模块的详细设计文档。价值在于尽早发现…

Nginx负载均衡主备模式

1. 背景 使用Nginx代理后端服务&#xff0c;有时候某些服务是不能使用多台负载均衡&#xff0c;但又想保障高可用&#xff0c;所以采用主备模式&#xff0c;记录如下&#xff1a; 2. 参考 nginx 负载均衡Nginx-负载均衡-后端状态max_conns、down、backup、max_fails、fail_t…