卷积计算过程中的减少计算量的优化方式
- 大卷积转化为小卷积:根据VGG的思想,对于大的卷积核可以转换为多个相同卷积串联的方式来减少。具体如下:
由图可以看出一个5X5的卷积核可以换成两个3X3的卷积,此时参数的个数由25变成了18(2X3X3),同理对于一个7X7的卷积核可以变成3个3X3的卷积,此时参数量由49变成了27。所以此时得到相同的效果使用了更少的参数。假设输入的特征大小是M,N,那么相同的输出效果计算量的变化为:(5X5): MxNx5x5和(2个3x3): MxNx3x3+MxNx3x3,计算量发生了明显的改变。
所以根据上述思想,应该尽量使用3X3的卷积核。
2. 采用DepthWise方式卷积
下述的计算过程均假设卷积计算时的padding和stride均为1。
常规的卷积计算需要将每个卷积核与特征图谱的每个通道进行卷积计算得出的结果再相加得到对应的一个通道数。假设特征图谱的大小为M,N,通道数是C,卷积计算的卷积核大小为KxK,通道数是D,则此时需要的计算量是:MxNxCxKxKxD。此时参数量为KxKxD
此时如果采用DepthWise的卷积方式。假设卷积计算分成两个部分,第一个部分是KxK,通道数是C,第二个是1X1,通道数是D。则此时的计算量为:MxNxKxKxC+MxNxCxD。此时的参数量为KxKxC+1x1xD。
由于特征提取的过程是一个通道增加的过程,所以此时D>C,最终可以得出MxNxKxKxC+MxNxCxD = (MxNxC)x(KxK+D) <(MxNxC)x(KxKxD)
由上述表达式可以看出计算量明显减小,并且计算效果相同。
3. 采用shuffle-channel方式卷积
上述Depthwise的方式中大量的计算均会集中在最后1X1的卷积计算中,因为D一般会远大于C,也大于卷积核(一般卷积核都是3X3或者5X5,而D一般时64,128,512等等),
为了解决这个问题,可以考虑分组进行,即假设输入由64个通道,卷积核由128个通道,将整个过程分成两组,则对于输入的前32个通道使用卷积的前64个进行计算,得出64个通道,对于输入的后32个采用卷积核的后64个最终得出了64个通道,最后整个输出就有64变成了128个。但是此时存在一个问题,就是前64个输出只使用了前32个输入,特征的提取过程没有使用到全局特征。
但是根据shuffleNet网络可以看出,存在一个shuffle-channel的方法,该方法就是为了解决分组通道的合并问题,即:按照上述的分组方式,得到2组输出,每一组有64个通道数。此时对每一块的输出都分成2组,编号分别是1和2,再将1的放在一起构成一个64的输出,2的放在一起构成一个64的输出,最终组合就是成了128的输出。此时每一个输出组中都有来自每个输入组的数据,最终可以按输出组继续计算。其具体过程如下:
4. CReLU:
CReLU = [ReLU(x), ReLU(-x)] ,由公式可以看出该方法是为了减少通道数使用的,可以在卷积计算的时候减少一倍的通道数,在非线性激活的时候采用CRELU的方式对输入进行激活可以将输出变成原来的2倍。
5. 去掉全连接层:
借鉴于inception实现过程,最后的全连接层可以变成对应的卷积层,要求输出的通道数是分类的输就行了,然后再对其进行tf.squeeze进行转换。这样可以减少计算量
卷积计算过程中的减少计算量的优化方式相关推荐
- 名词解释 算法的有限性_欲借助 FFT 算法快速计算两有限长序列的线性卷积,则过程中要调用 ( ) 次 FFT 算法_学小易找答案...
[单选题]计算 N=2 L ( L 为整数)点的按时间抽取基 -2FFT 需要 ( ) 级蝶形运算 [单选题]Les étudiants chinois, une fois arrivés en Fr ...
- 哈佛大学联合团队新突破:在计算过程中实现量子纠错
实验室成员:左起依次为Dolev Bluvstein.Harry Levine(视频成员).Sepehr Ebadi.Mikhail Lukin (图片来源:哈佛大学) 试想一下,一边飞行一边制造飞机 ...
- 栈在表达式计算过程中的应用
栈在表达式计算过程中的应用 :建立操作数栈和运算符栈.运算符有优先级. 规则: 自左至右扫描表达式,凡是遇到操作数一律进操作数栈. 当遇到运算符时,如果它的优先级比运算符栈栈顶元素的优先级高就进栈.反 ...
- python吃显卡还是内存不足_解决pytorch GPU 计算过程中出现内存耗尽的问题
Pytorch GPU运算过程中会出现:"cuda runtime error(2): out of memory"这样的错误.通常,这种错误是由于在循环中使用全局变量当做累加器, ...
- 流计算过程中对于窗口的处理方式
前言 与传统批处理作业方式不同,实时流的计算处理过程是连续的.所以当我们在流式作业中要做传统的阶段统计工作(求和,取均值计算)的时候,需要在逻辑上对这些数据进行分片,然后再处理.本文我们来聊聊流计算过 ...
- 2019 d serv 激活_化疗过程中肌肉减少症的发生机制及维生素D、ω-3脂肪酸的作用...
文章来源:蔡丽雅,赵文芝,杨振鹏,贺源,邓丽,张艳,石汉平.肿瘤化疗过程中肌肉减少症的发生机制及维生素D.ω-3脂肪酸的作用[J].中国医学前沿杂志(电子版),2020,12(1):13-19. 正 ...
- 网络营销过程中如何避免网站的过度优化情况的发生?
在互联网中从事网络营销的企业网站自然逃不过网站优化技术的应用,而对于一些业务相对不是很熟练的站长来说,掌握好网站优化限度的问题也不是很ok,这就会导致网站没有收获到优质排名不说,反而容易因为过度优化造 ...
- 面试宝典笔记:卷积计算过程中的FLOPs
模型的运算次数,可用 FLOPs衡量,也就是浮点运算次数(FLoating-point OPerations),表征的是模型的时间复杂度.模型空间复杂度通过Parameters反映,即模型的参数量. ...
- 求qt如何解决小数计算过程中的精度丢失
问题描述 在下面的例子中,变量a减去一个常量,本该值为0.90,但是通过程序得到a的值0.8999999999,例子如下: qreal a = 0.95; a = a - 0.05; 不光是做减法的时 ...
最新文章
- php 导出csv字符串,PHP CSV字符串到数组
- 双linux grub rescue,Grub Rescue修复方法
- c语言怎样判断键盘 输入法,如何快速的认识键盘和正确的使用键盘
- ElasticSearch搜索语法学习(term,filter,bool,terms,range)
- SQL高级---SQL UNION 和 UNION ALL 操作符
- CF702F-T-Shirts【FhqTreap】
- 下拉推广系统立择火星推荐_下拉词删除都择火星下拉
- Android 手机发送短信
- jquery easy ui 1.3.4 事件与方法的使用(3)
- 【原】React中,map出来的元素添加事件无法使用
- mysql 新增字段时判断字段是否存在
- shell脚本中一些日期的定义
- 嘛:如何远视 还有遥远的未来
- 2013年第四届蓝桥杯C/C++B组省赛题目及答案 1
- web利用html2canvas实现截图上传图片
- 人际关系——做事要周全
- 预警|使用方维、微吼等系统直播平台警惕××××××
- 如何降低TCP三次握手延迟负面影响
- 申请软件著作权登记没有源代码怎么办?如果有源代码怎么快速下证?
- 计算机真有趣作文,。。。。真有趣作文(共10篇)