概述

神经网络模型运算可以看成一个数据流入流出的过程,涉及的计算包含内存占用和浮点运算量两个方面。数据占用的空间计算很容易,数据量乘以表示单个数据所占用的字节数 (e.g, 4, 8)。复杂一点的是 layer 部分的参数占用的空间。

本篇不涉及训练时的梯度保存空间。

data-->layer-->data


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}) $;加和乘各一半。