jupyter

卷积中参数量和计算量

2019-08-05  本文已影响0人  Latet

前言

本文旨在学习和记录,如需转载,请附出处https://www.jianshu.com/p/c2a0ba5bb3d1

普通卷积

参数量

参数量是参与计算参数的个数,占用内存空间,假设输入通道和输出通道都是1,核大小为(K,K)&,输入map大小为

(H_{in},W_{in}),输出map大小为(H_{out},W_{out}),考虑偏置,不补0的卷积。

其参数量为:K*K+1

若考虑输入通道C_{in}和输出通道C_{out},则参数量为:(C_{in}*(K*K)+1)*C_{out}

计算量(乘加次数)

MAC(Multiply Accumulate),需要考虑输出map的大小,1个MAC算两次操作

假设输入通道和输出通道都是1,核大小为K*K,输入map大小为

(H_{in},W_{in}),输出map大小为(H_{out},W_{out}),考虑偏置,不补0的卷积。

其计算量为:K*K*H_{out}*W_{out}

若考虑输入通道C_{in}和输出通道C_{out},则计算量为:C_{in}*K*K*H_{out}*W_{out}*C_{out}

FLOPs(floating point operations)

浮点运算量,指计算量,跟乘加次数有点不一样,若考虑偏置

则FLOPs =(C_{in}*2*K*K)*H_{out}*W_{out}*C_{out}

不考虑偏置的情况下

则FLOPs =(C_{in}*2*K*K-1)*H_{out}*W_{out}*C_{out}

注意:这里乘和加分开,加的操作因为n个数相加所以减1了,考虑偏置则补掉了加1

可分离卷积

可分离的卷积具体操作是先对输入map每单个channel进行卷积的操作,然后再进行1维卷积实现输出通道的改变。

假设输入通道和输出通道都是1,核大小为(K,K)&,输入map大小为

(H_{in},W_{in}),输出map大小为(H_{out},W_{out}),考虑偏置,不补0的可分离卷积。

考虑输入通道C_{in}和输出通道C_{out}

参数量:

C_{in}*K*K+C_{out}*(C_{in}*1*1+1), 后面加1是偏置

MAC计算量:

C_{in}*K*K*H_{out}*W_{out}+C_{in}*C_{out}*H_{out}*W_{out}

FLOPs计算量为:

(C_{in}*2*K*K-1)*H_{out}*W_{out}+(C_{in}*2*1*1)*H_{out}*W_{out}*C_{out}

参考:

https://www.zhihu.com/question/65305385/answer/451060549

说明

如有错误,欢迎指正!

上一篇下一篇

猜你喜欢

热点阅读