转自知乎:https://zhuanlan.zhihu.com/p/86587652

1、参数量的计算

1.1 卷积网络

假设卷积核的大小为 k*k, 输入channel为M, 输出channel为N。

(1)bias为True时:

则参数数量为:k×k×M×N + N(bias的数量与输出channel的数量是一样的)

(2)bias为False时:

则参数数量为:k×k×M×N

(3)当使用BN时,还有两个可学习的参数α和β,参数量均为N

则参数数量为:k×k×M×N + 3×N

常用网络架构的参数数量:

AlexNet:62369155

VGG16:138357544

ResNet10(BasicBlock):14356544

ResNet18(BasicBlock):33161024

ResNet34(BasicBlock):46159168

ResNet50(Bottleneck):63470656

ResNet101(Bottleneck):85205312

ResNet152(Bottleneck):117364032

1.2 全连接层

假设 输入神经元数为M,输出神经元数为N,则

(1)bias为True时:

则参数数量为:M*N + N(bias的数量与输出神经元数的数量是一样的)

(2)bias为False时:

则参数数量为:M×N

2、计算量

2.1 卷积

假设输入特征图(B,C,H,W),卷积核大小为K×K, 输入通道为C,输出通道为N,步长stride为S, 输出特征图大小为H2,W2.

(1)一次卷积的计算量

一个k×k的卷积,执行一次卷积操作,需要k×k次乘法操作(卷积核中每个参数都要和特征图上的元素相乘一次),k×k−1 次加法操作(将卷积结果,k×k 个数加起来)。所以,一次卷积操作需要的乘加次数:(K×K)+(K×K−1)=2×K×K−1

(2)在一个特征图上需要执行卷积需要卷积的次数

在一个特征图上需要执行的卷积次数:((H-k+Ph)/S +1 )×((H-k+Pw)/S +1),Ph,Pw表示在高和宽方向填充的像素,此处假定了宽高方向滑动步长和核的宽高是一样,若不同,调整一下值即可。若不能整除,可向下取整。

(3)C个特征图上进行卷积运算的次数

C个输入特征图上进行卷积运算的次数为C

(4)输出一个特征图通道需要的加法次数

在C个输入特征图上进行卷积之后需要将卷积的结果相加,得到一个输出特征图上卷积结果,C个相加需要C-1次加法,计算量为 :(C-1)×H2×W2

(5)输出N个特征图需要计算的次数

N×((C-1)×H2×W2 + (2×K×K−1)×((H-k+Ph)/S +1 )×((H-k+Pw)/S +1) ×C)
(6)一个batch需要计算的次数

B×N×((C-1)×H2×W2 + (2×K×K−1)×((H-k+Ph)/S +1 )×((H-k+Pw)/S +1) ×C)

2.1 全连接

假设 输入神经元数为M,输出神经元数为N,则

(1)先执行M次乘法;

(2)再执行M-1次加法

(3)加上bias,计算出一个神经元的计算量为 (M+M-1+1)

(4)N个输出神经元,则总的计算量为 2M×N

Logo

腾讯云面向开发者汇聚海量精品云计算使用和开发经验,营造开放的云计算技术生态圈。

更多推荐