一、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 =
flops:
FLOPs =
乘法次数为,加法次数为,+1为加上一个偏置项,输入矩阵维度为
计算机视觉中常把一次乘法和加法合在一起,所以可以去掉前面乘的2。
4.BN层
Flops
计算机视觉中常把一次乘法和加法合在一起,所以可以去掉前面乘的2。
5.Transformer
transformer的Flops为:
对q,k,v的全连接层:。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最后一维进行归一化,因此,参数量为N*2,N表示token数(N=H*W)
FLOPS:和BN的原理一样,进行一次乘法一次加法,因此,计算量为2*N*dim(N=H*W),计算机视觉中常把一次乘法和加法合在一起,所以可以去掉前面乘的2。