微信正文链接:https://mp.weixin.qq.com/s/nknW
1.FLOPs和Params计算
1.1概念理解
FLOPS:注意全大写,是floating point operations per second的缩写,意指每秒浮点运算次数,理解为计算速度。是一个衡量硬件性能的指标。
计算公式:
对卷积层:(K_h * K_w * C_in * C_out) * (H_out * W_out)
对全连接层:C_in * C_out
FLOPs:注意s小写,是floating point operations的缩写(s表复数),意指浮点运算数,理解为计算量。可以用来衡量算法/模型的复杂度。
Params:是指模型训练中需要训练的参数总数
模型参数量计算公式为:
对卷积层:(K_h * K_w * C_in)* C_out
对全连接层:C_in * C_out
注意:
1.params只与你定义的网络结构有关,和forward的任何操作无关。即定义好了网络结构,参数就已经决定了。FLOPs和不同的层运算结构有关。如果forward时在同一层(同一名字命名的层)多次运算,FLOPs不会增加
2.Model_size = 4*params 模型大小约为参数量的4倍
计算量
了解模型速度的一种方法是简单计算它执行的计算量。我们通常将其视为FLOPS,每秒浮点运算。稍有不同的其他度量是MACC或乘法累加运算,也称为MADD。
我们不应该忽略的是层的stride,以及任何dilation因子,padding等。这就是为什么我们需要参看层的输出特征图的尺寸Hout × Wout,因它考虑到了stride等因素。
示例:对于3×3,128个filter的卷积,在112×112带有64个通道的输入特征图上,我们执行多个MACC:
3 × 3 × 64 × 112 × 112 × 128 = 924,844,032
这几乎是10 亿次累积运算!使得GPU忙于计算......
注意:在此示例中,我们使用“same”填充和stride = 1,以便输出特征图与输入特征图具有相同的大小。通常看到卷积层使用stride = 2,这会将输出特征图大小减少一半,在上面的计算中,我们将使用56 × 56而不是112 × 112。