深度学习之(经典)卷积层计算量以及参数量总结 (考虑有无bias,乘加情况) |
您所在的位置:网站首页 › 卷积中bias › 深度学习之(经典)卷积层计算量以及参数量总结 (考虑有无bias,乘加情况) |
目录: 1、经典的卷积层是如何计算的 2、分析卷积层的计算量 3、分析卷积层的参数量 4、pytorch实现自动计算卷积层的计算量和参数量
1、卷积操作如下: http://cs231n.github.io/assets/conv-demo/index.html 假设卷积层的输入特征图大小为C_in x H x W, 卷积核大小为K_1 x K_2, padding = P_1 x P_2, stride = S_1 x S_2, filter 数目为C_out。 输出的特征图大小为C_out x H_out x W_out, 其中 H_out = [(H - K_1 + 2P_1) / S_1] + 1 W_out = [(W - K_2 + 2P_2) / S_2] + 1 []表示向下取整。
2、计算量分析
只考虑乘法计算量: 为了得到输出的特征图的某一个位置的像素值,需要 C_in x K_1 x K_2次乘法操作,而特征图总共有C_out x H_out x W_out个像素,因此总计算量为 C_out x H_out x W_out x ( C_in x K_1 x K_2)
同时考虑乘法和加法计算量: 1)bias=true,即考虑偏置的情况 乘法操作计算量: 为了得到输出的特征图的某一个位置的像素值,需要 C_in x K_1 x K_2 次乘法操作,而特征图总共有C_out x H_out x W_out个像素,因此总计算量为 C_out x H_out x W_out x ( C_in x K_1 x K_2) 加法操作计算量: 为了得到输出的特征图的某一个位置的像素值,需要 (C_in x (K_1 x K_2 - 1)) + (C_in - 1) + 1 = C_in x K_1 x K_2 次加法操作,可以看成三部分,第一部分表示在某一个通道进行一个K_1 x K_2 大小的卷积操作需要 (K_1 x K_2 - 1)次加法,有C_in个通道,故 C_in x (K_1 x K_2 - 1)次加法,每个通道都卷积后,得到C_in个数,接下来需要有 C_in - 1次加法,最后加上bias又1次加法。 而特征图总共有C_out x H_out x W_out个像素,因此总加法计算量为 C_out x H_out x W_out x ( C_in x K_1 x K_2)
因此综上所述,乘加法计算量为 2 x C_out x H_out x W_out x (C_in x K_1 x K_2)次
Note that: 当前一般浮点操作数(flops),一般只看卷积乘法以及加上bias的一次加法。 bias=true, flops = C_out x H_out x W_out x ( C_in x K_1 x K_2 + 1) bias=false, flops= C_out x H_out x W_out x ( C_in x K_1 x K_2)
2)bias=false,不考虑偏置情况。根据上述分析,无bias情况下乘加法计算量为C_out x H_out x W_out x (2 x C_in x K_1 x K_2 - 1)次
3、参数量分析 卷积核参数量: C_out x C_in x K_1 x K_2 bias参数量: C_out 因此总参数量为 C_out x C_in x K_1 x K_2 + C_out
4、pytorch实现 |
今日新闻 |
推荐新闻 |
CopyRight 2018-2019 办公设备维修网 版权所有 豫ICP备15022753号-3 |