目录
神经网络随着层数的加深,网络参数的个数会越来越多,小的网络有成千上万个参数,大的可以达到千万个网络参数。
所以应该如何计算神经网络参数的个数?
图像分类的神经网络,包含两个部分:特征提取层+ 分类层
特征提取层就是将提取图像中的特征,这里的特征就是图像的细节,例如边缘、关键点等等。类似于人在识别物体的时候,往往不需要看清物体具体长什么样子,只需要观察大概的轮廓就知道这个物体是人还是树。那么这里人的轮廓或者树的轮廓就是特征,而我们是不需要知道这个人长得怎么样的。
因此神经网络的特征提取层就是在不断的提取这些特征
如果把神经网络比作一个近视的人的话,那么他在分类例如人、树的时候,度数就可以深一点(神经网络可以浅一点),只要不是太瞎,都可以将人、树进行分类。但是在做男人、女人分类的时候就不能这么瞎了,因为男人女人的轮廓是近似的,所以随着分类任务的难度,神经网络的就要叠加深度,让神经网络不要看的那么模糊
在神经网络中,特征提取的操作就是利用卷积。最典型的例子就是假如卷积核是soebl算子的时候,就可以进行垂直或者水平的边缘检测(具体的可以参考图像处理的空域滤波)。因此,特征提取的卷积操作只不过是神经网络将它认为的关键特征逐步的提取出来而已
而分类层就提取的特征按照label进行分类,用的是线性的全连接
所以,计算神经网络里面的参数包含两个部分:特征提取层+ 分类层
1. 卷积层
这里先介绍卷积层的参数
上图是一个3维图像的卷积过程,这里将图像的维度叫做通道(channel)。卷积的过程就是建立一个卷积核对每个通道的图像进行卷积(每个通道对应不同的卷积核),然后相加产生一个单通道的图像
因为神经网络学习的内容就是卷积核里面的权重是多少,那么这里需要参数的个数就是 3*3*3 = 27
如果图像的维度不是3通道呢 ?或者说输出的维度一定是 单通道 ?
我们将它当成方块来进行思考,一个方块就是一组卷积核。这样图像的维度是C的话,将C个卷积核堆在一块就是一组卷积核,那么产生的图像仍然是单通道的(一层输出特征图)
只要将方块(一组卷积核)的个数任意扩展,那么输出的图像就是多通道了
所以上述图像参数个数是:FH * FW * C * FN,也就是一个方块的权重个数 * FN 个,然后每个方块又是由一片一片的卷积核堆起来的,就等于 FH * FW * C
所以,卷积层的参数计算公式为 :卷积核的size * 一组卷积核的深度 * 总共有多少组
这里与之对应的关系是:卷积核的深度 = 输入图像的深度,方块的个数 = 输出图像的深度
所以,可以得出下面的参数个数
而偏置bias 是等于方块的个数,也就是输出的深度
如果将bias改为True的话,加上输出的深度就行了,这里是6,所以答案为456
2. 分类层
全连接层的计算很简单,就是:输入的深度 * 输出的深度
如下的线性层,这里是 84*10 = 840
而偏置bias 是等于输出的个数
如果将bias改为True的话,加上输出的深度就行了,这里是10,所以答案为850
3. 计算 LeNet 网络的参数个数
LeNet 网络结构如图
conv1 的参数个数为:3*6*5*5 + 6 = 456
这里的3 是输入的深度,6是输出的深度,5是卷积核的大小,这里是正方形 5 * 5
因此网络总参数个数应该为:456+2416+48120+10164+850=62006
如图,和我们计算的结果一样