1.区分FLOPs和FLOPS
FLOPS:注意全大写,是floating point operations per second的缩写,意指每秒浮点运算次数,理解为计算速度。是一个衡量硬件性能的指标。
FLOPs:注意s小写,是floating point operations的缩写(s表复数),意指浮点运算数,理解为计算量。可以用来衡量算法/模型的复杂度。
注意在深度学习中,我们用的是FLOPs,也就是说计算量,即用来衡量算法/模型的复杂度。
2、FLOPS的计算
(1)卷积操作
input:(H,W,Ci)
kernel size:(k,k,Co)
step=1
一张特征图一次卷积操作的计算量:
-
一次kernel操作:(k2 ×Ci)+(k2 ×Ci -1)=2k2 Ci -1
前面的括号是乘法计算,后面的括号中是加法计算,该计算假设卷积操作只有权重没有bias项。 -
整个feature map的卷积计算量:(2k2 Ci -1 )×Co×H×W
(2)全连接操作
全连接层的维度:输入I;输出N
计算量:
[ I + ( I - 1) ] × N=(2I-1)N (该计算也没有考虑bias)