神经网络模型的参数量和FlOPS
创始人
2024-05-14 09:53:02

一、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最后一维进行归一化,因此,参数量为N*2,N表示token数(N=H*W)

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

 

相关内容

热门资讯

阿西吧是什么意思 阿西吧相当于... 即使你没有受到过任何外语培训,你也懂四国语言。汉语:你好英语:Shit韩语:阿西吧(아,씨발! )日...
猫咪吃了塑料袋怎么办 猫咪误食... 你知道吗?塑料袋放久了会长猫哦!要说猫咪对塑料袋的喜爱程度完完全全可以媲美纸箱家里只要一有塑料袋的响...
世界上最漂亮的人 世界上最漂亮... 此前在某网上,选出了全球265万颜值姣好的女性。从这些数量庞大的女性群体中,人们投票选出了心目中最美...
北京的名胜古迹 北京最著名的景... 北京从元代开始,逐渐走上帝国首都的道路,先是成为大辽朝五大首都之一的南京城,随着金灭辽,金代从海陵王...