神经网络中的parameters与FLOPs

在神经网络的压缩与加速设计中,必然要考虑高内存存储与高度复杂的浮点计算,高内存存储体现在模型参数过多,复杂体现在浮点计算次数过多。因此有必要讲一下参数与FLOPs的计算方法。

1. 模型parameters计算

首先明确 parameters 是一个模型所要学习的权重(W, b),或者说是定义这个模型的所需要的变量。
神经网络中的parameters与FLOPs_第1张图片
注:卷积核是一个 d * d * C 的3D卷积核,然后 C 是输入通道数,卷积核的个数 N 决定输出通道数。
CNN模型 parameters 计算主要体现在卷积层与全连接层,现以LeNet5网络结构为例
神经网络中的parameters与FLOPs_第2张图片

1.1 卷积层

卷积层 parameters 的计算主要体现在 W,b 个数上,比如 C1 层:
可训练参数:5 * 5 * 1 * 6 + 6 = (5 * 5 * 1 + 1)* 6 = 156
注: 其中 5 * 5 表示卷积核大小,1 表示输入通道数,6 表示卷积核个数(决定输出通道数)
连接数:(5 * 5 * 1 + 1)* 6 * 28 * 28

1.2 全连接层

全连接层 parameters 的计算主要体现 W 上,比如 F6层:
In F7 * WF7 = Output, 对应维度:1 * 84, 84 * 10, 1 * 10。
可训练参数:84 * 10 + 10 = 850

再根据具体案例读者可以联系一下
神经网络中的parameters与FLOPs_第3张图片

2. 模型FLOPs计算

在讲解FLOPs之前先了解一下FLOPS。
FLOPS(即“每秒浮点运算次数”,“每秒峰值速度”),是“每秒所执行的浮点运算次数”(floating-point operations per second)的缩写。它常被用来估算电脑的执行效能,尤其是在使用到大量浮点运算的科学计算领域中。正因为FLOPS字尾的那个S,代表秒,而不是复数,所以不能省略掉。
注:现今大部分的处理器中,都有一个专门用来处理浮点运算的“浮点运算器”(FPU)。
FLOPs (floating point operations),即表示浮点运算次数,小s后缀是复数的缩写,可以看做FLOPS在时间上的积分,类似速度在时间时间上的积分路程。

Feature map上每个点的权值是共享,因此才获得特征不变性,以及大幅减少参数数量,所以我们在计算FLOPs是只需在 parameters 的基础上再乘以 feature map 的大小即可(因为对应元素乘法或加法就是一次浮点运算),即对于某个卷积层,它的FLOPs数量为:[(Kh * Kw * Cin) * Cout + Cout] * (H * W) = num_params * (H * W),其中num_params表示该层参数的数量,其实FLOPs就是上节所说的连接数(可以将一次连接看成一次浮点运算)。

对于全连接层,由于不存在权值共享,它的FLOPs数目即是该层参数数目:Nin * Nout + Nout

你可能感兴趣的:(DeepLearning)