0


神经网络模型的参数量和FlOPS

一、FLOPS、FLOPs和GFLOPs的概念

FLOPS:注意S是大写,是 “每秒所执行的浮点运算次数”(floating-point operations per second)的缩写。它常被用来估算电脑的执行效能,尤其是在使用到大量浮点运算的科学计算领域中。正因为FLOPS字尾的那个S,代表秒,而不是复数,所以不能省略掉。
FLOPs:注意s小写,是floating point operations的缩写(s表复数),意指浮点运算数,理解为计算量。可以用来衡量算法/模型的复杂度。
GFLOPs:一个GFLOPs等于每秒十亿(=10^9)次的浮点运算。

1.卷积层

参数量:

params = C_in×(C_out×K×K +1)
其中,Co代表输入的通道数,Ci代表输出的通道数,K为卷积核的大小,若卷积核有偏置项(Bias)则+1.

flops:
FLOPs = [C_in×K×K+(C_in×K×K-1) +1]×W×H×C_out
其中C_in×K×K为一次卷积的乘法预算的计算量,C_in×K×K-1为一次卷积加法运算的计算量,+1为偏置项,W与H为特征图(feture map)的长和宽。
可简化为:
FLOPs = 2×C_in×K×K×W×H×C_out
计算机视觉中常把一次乘法和加法合在一起,所以可以去掉前面乘的2。

2.池化层

参数量:

    深度学习中,参数量一般是指随着训练可以不断进行自我调节大小的参数的数量。而池化层主要是用来采样,例如:最大池化,取一个filter中的最大值。所以池化层可以不用算参数量。

flops:

3.全连接层

参数量
params = (dim_{_{in}}+1)\times dim_{out}
flops:
FLOPs =N\times [dim_{in}+(dim_{in}-1)+1]\times dim_{out}=2\times dim_{in}\times dim_{out}
乘法次数为dim_{in},加法次数为dim_{in}-1,+1为加上一个偏置项,输入矩阵维度为N\times dim_{in}

计算机视觉中常把一次乘法和加法合在一起,所以可以去掉前面乘的2。

4.BN层

Flops

计算机视觉中常把一次乘法和加法合在一起,所以可以去掉前面乘的2。

5.Transformer

transformer的Flops为:

对q,k,v的全连接层:N*dim*dim*3。N为token数(N=H*W)。

q,k点乘:num_heads * N * (dim // num_heads) * N

再点乘v:num_heads * N * N * (dim // num_heads)

FFN层:2 * N * dim * dim * self.mlp_ratio

6.LayerNorm

    elementwise_affine如果设为False,则LayerNorm层不含有任何可学习参数。如果设为True(默认是True)则会包含可学习参数weight和bias,用于仿射变换,即对输入数据归一化到均值0方差1后,乘以weight,即bias。

由于LayerNorm默认在dim最后一维进行归一化,因此,参数量为N2,N表示token数(N=HW)

FLOPS:和BN的原理一样,进行一次乘法一次加法,因此,计算量为2Ndim(N=H*W),计算机视觉中常把一次乘法和加法合在一起,所以可以去掉前面乘的2。


本文转载自: https://blog.csdn.net/qq_52053775/article/details/128632626
版权归原作者 樱花的浪漫 所有, 如有侵权,请联系我们删除。

“神经网络模型的参数量和FlOPS”的评论:

还没有评论