[! Note] FLOPs 全称为 Floating point operations,表示浮点运算数量。由于计算机中乘法的计算速度比加法慢,因此在衡量计算复杂度时主要考虑乘法

实际上还有大写 S 的缩写,即 FLOPS,全称为 floating point operations per second 的缩写,意指每秒浮点运算次数,理解为计算速度

Convolutional layer (卷积层)

对于上图所示的一次卷积操作来说,其计算量为绿色立方体和橙色立方体的乘积,即

[! note]- 推导 |400 给定 为卷积核尺寸, 表示输入的特征图的通道个数。显然,一个卷积核应该也有 个通道数

那么对于输出特征图中的一个像素点来说,其计算量为

假设经过一个卷积层后,输出特征图的尺寸为 。显然,总的计算量为单个像素点的计算量 输出特征图中所有点的个数,即

Linear layer (全连接层)

等价于矩阵乘法的计算复杂度。对于矩阵 和矩阵 的相乘,起计算复杂度为

假设一个全连接层 FC,输入长度为 I,输出长度为 O ,即将[1, I] 的向量变成[1, O] 的向量,则其计算量为

激活层 (Activation layer)

激活层所增加的计算量相比于整个模型来说一般都是微不足道的,因此在实际的论文或者工作中,往往会直接忽略激活层所带来的计算量增加。

ReLU

当输入的向量尺寸为 [1, I]时,每个位置都会计算一个ReLU函数,即计算量为

Sigmoid

相对来说,计算 Sigmoid 更复杂。 当输入的向量尺寸为 [1, I]时,每个位置都会计算一个 Sigmoid 函数,即计算量为 (硬记)

[! note]- 为什么 Sigmoid 的计算量是 在计算FLOPS时,我们通常将加,减,乘,除,求幂,平方根等作为单个FLOP进行计数,由于在Sigmoid激活函数中有四个不同的运算,因此将其判定为每个函数输出4 FLOPS或总层输出 J×4 FLOPS。


参考资料