卷积神经网络中参数量的计算与模型占用显存的计算

本文转自@花花知乎用户的文章片段「七夕的礼物」: 一日搞懂卷积神经网络,详细内容请看原作者的详细描述!


以前总看见别人说某某神经网络参数量有多少,大概占用多大的显存等等描述,但心里却并不知道为什么是这么多,今天看到这篇文章,大体上有了一定的理解。


参数量的计算:

「VGG Network」,牛津大学VGG实验室设计的架构,将AlexNet的8层提高到了19层,真正让深度这个词得以充分体现。
从VGG开始,人们不再使用太大的卷积核,取而代之的是若干个小卷积核的组合。
比如,3个步长为1的3X3卷积核,可以拥有1个7X7的卷积核一样的感受野。但是,它可以使整个网络变得更深,并且更具有非线性。
同时,还能够进一步减少训练的参数量。

卷积神经网络中参数量的计算与模型占用显存的计算_第1张图片
image

关于参数的计算,有些朋友有一些疑惑,那么下图可以帮助你理解它是如何计算的。

我们要训练的参数其实就是卷积核的参数量,这和输入和输出的特征图数量以及卷积核本身的大小有关,希望下图的列子能够帮到你。备注:仔细理解下面这张图

卷积神经网络中参数量的计算与模型占用显存的计算_第2张图片
image

如果你理解了上图的列子,欢迎你再尝试自己计算一下VGG16的总参数量
值得一提的是,在训练的时候,因为有forward 和 backward,所以参数量要乘以2,另外一个就是网络所需要的内存,这个也是非常重要的一个指标,因为当前的GPU内存空间非常有限。可以从下图得知,在网络最开始的几层,占用的GPU内存最多,而绝大多数的参数,都来自于全连接层,这也是一个后来全局池化被运用而全连接层被减少使用的原因。
卷积神经网络中参数量的计算与模型占用显存的计算_第3张图片
image


模型占用显存的计算

妹纸:那个,可以问你,模型的Batch Size怎么决定嘛?或者说,怎样计算模型所需要的显存啊。。
花花:这个问题,就有那么一丢丢复杂了。。你听我慢慢说吗??
妹纸:额,这个,那还是算了吧。。
花花:。。。

还是补一个模型怎么计算吧。
正常来讲,显存的占用主要是Model本身和每一层的output。

卷积神经网络中参数量的计算与模型占用显存的计算_第4张图片
image

计算方式为:
卷积神经网络中参数量的计算与模型占用显存的计算_第5张图片
image

卷积神经网络中参数量的计算与模型占用显存的计算_第6张图片
image

卷积神经网络中参数量的计算与模型占用显存的计算_第7张图片
image

卷积神经网络中参数量的计算与模型占用显存的计算_第8张图片
捕获.PNG

再次感谢知乎用户@花花的详解!详细信息请看原文

你可能感兴趣的:(卷积神经网络中参数量的计算与模型占用显存的计算)