CNN中parameters和FLOPs计算

给定一个卷积层 C in * C out * H k * W k  (H k * W k 为 kernel shape), output feature  map shape 为 H * W,其 FLOPs 为____,参数量为 ______(1 乘累加 = 2 FLOPs).

CNN中parameters和FLOPs计算_第1张图片

CNN中parameters和FLOPs计算_第2张图片

FLOPS(即“每秒浮点运算次数”,“每秒峰值速度”),是“每秒所执行的浮点运算次数”(floating-point operations per second)的缩写。它常被用来估算电脑的执行效能,尤其是在使用到大量浮点运算的科学计算领域中。正因为FLOPS字尾的那个S,代表秒,而不是复数,所以不能省略掉。

矩阵乘法的浮点运算次数如何计算
假设有m * n的矩阵A, 和n * o的矩阵B, 则最终会形成m * o的矩阵C (C = A * B)
其中n是A的宽度, 也是B的高度.

最终总的运算量需要m * o * n次乘加.
将1次乘加看成两次运算(一次乘法, 一次加法),
则最终需要 2 * m * o * n次运算, 这是总的浮点数运算量

由于每个feature map上每个点的权值是共享,这是CNN的一个重要特性,也可以说是优势(因此才获得特征不变性,以及大幅减少参数数量),所以我们在计算FLOPs是只需在parameters的基础上再乘以feature map的大小即可,即对于某个卷积层,它的FLOPs数量为:

[(K_h * K_w * C_{in}) * C_{out} + C_{out}] * (H * W) = num\_params * (H * W)

其中num\_params表示该层参数的数目。

对于全连接层,由于不存在权值共享,它的FLOPs数目即是该层参数数目:N_{in} * N_{out} + N_{out}.

转自 https://blog.csdn.net/qq_36653505/article/details/86700885

你可能感兴趣的:(CNN)