神经网络所需算力估算

**

神经网络所需算力估算

**

近年来深度学习的应用场景越来越多,在生活各个方面都有需求,虽然其在于各个场景中都去的了很好的效果,但是深度学习搭建的各种算法模型还需要依托非常好的硬件平台才能达到精度,实时性等要求。硬件平台的算力是限制深度学习网络的在于各种前端应用的主要障碍,因此我们在设计神经网络的时候需要充分考虑其计算量,在所需计算量小的时候获取最好的效果,如精度,map或者像素IOU等。
FLOPS:floating point operations per second的缩写,意指每秒浮点运算次数,理解为计算速度。是一个衡量硬件性能的指标

FLOPs:floating point operations的缩写(s表复数),意指浮点运算数,理解为计算量。可以用来衡量算法/模型的复杂度。
下面主要讨论神经网络经典结构所需的FLOPs.
深度学习模型是由全连接层和卷积层组曾,计算量主要也是他们带来的,因此我们主要研究卷积层和全连接层的计算量。

卷积层计算FLOPs

:(“2” ×"C" _“i” ×K^2-1)×H×W×C_O
“C” _“i” 是输入数据的通道数,K是卷积核大小,H,W是输出feature map的高宽,C_O 是输出feature map通道。
2是因为在这里一个MAC算两个operations(例如:(m,n)矩阵和(n,m)矩阵的内积结果是(m,m)矩阵,在其计算过程中有n*m次乘法和(n-1)*m次加法,前文中说的两次operations分别就是乘和加,那么浮点运算次数就是(2n-1)m,在有些计算方法是一个MAC算一次operations,那么这种情况下浮点运算只有nm次)

这里没有考虑bias 因此上式中是-1,因为n个数相加只有n-1次加法。
如果考虑bias 则没有-1,因此每个通道卷积后都会有加上bias,刚好抵消。

计算公式中 : (“2” ×"C" _“i” ×K^2-1)"=" (“C” _“i” ×K^2 )"+" (“C” _“i” ×K^2 “-1” )
中第一项是参数在一层中产生的乘法运算,第二项是参数在一层中产生的加法运算(可见上述中例子)
每个输出层所需参数个数:“C” _“i” ×K^2×C_O
每层参数产生的计算量:“2"×"C” _“i” ×K^2-1
这里是卷积后feature map大小不变,对图做了padding,可知,输入特征上每个点的权值都是共享的,每个点卷积产生的计算量都是一样的,因此FLOPs:
(“2” ×"C" _“i” ×K^2-1)×H×W×C_O

全连接计算FLOPs

:(“2” ×I-1)×O
输入是(I,1),输出是(O,1),产生的参数是:(O,I)
可知道其所需算力FLOPs:I×O+I×O-1=(“2” ×I-1)×O
也没有考虑bias,若考虑了偏执就没有-1.
以上计算方法都是在一个MAC算两个operation的情况下,可参考上述例子,当然评估方法也可以是一个MAC是一个operation。

你可能感兴趣的:(深度学习模型算力预估方法)