概述
神经网络模型运算可以看成一个数据流入流出的过程,涉及的计算包含内存占用和浮点运算量两个方面。数据占用的空间计算很容易,数据量乘以表示单个数据所占用的字节数 (e.g, 4, 8)。复杂一点的是 layer 部分的参数占用的空间。
本篇不涉及训练时的梯度保存空间。
data-->layer-->data
浮点运算概念
参考自:https://blog.csdn.net/sinat_34460960/article/details/84779219
FLOPs:floating point operations,即表示浮点运算次数。
FLOPS:floating point operations per second,意指每秒浮点运算次数。
下图是各种显卡的计算能力(TFLOPS,每秒万亿次浮点运算 $10^{12} FLOPs /s$)。参考NVIDIA.
全连接型神经网络
输入data: (x,1);
输出data: (y, 1);
$ params = y \times (x+1) $
"+1": bias.
$ FLOPs = y \times x [乘] + y \times x [加] $
卷积神经网络
输出feature map大小计算公式:
$ out_w = \frac{(in_w + 2P-f)}{2}+1 $
P 是 padding size,f是卷积核大小, $out_h$同理。
输入data:$in_w, in_h, in_{chs}$;
输出data: $out_w, out_h, out_{chs}$;
$ params = f \times f \times(in_{chs} + 1) $
$ FLOPs = 2 \times (f \times f \times in_{chs})\times(out_w\times out_h \times out_{chs}) $;加和乘各一半。