我们在用keras进行神经网络建模后,打印模型的摘要(print(model.summary))会出现每一层参数的个数,很多初学者可能会对参数个数怎么计算的非常困惑,本文将由浅至深的讲解卷积神经网络各层参数的计算方法,对卷积神经网络结构还不了解的同学请自行百度了解。
1.什么是卷积神经网络的参数
我们都知道神经网络是一个前向传播和反向优化的过程,这个优化过程其实优化的是层与层之间的连接权重w和权重b。其实每一层连接都可以简单的抽象为:WX+b=Y
其中X为输入,Y为预测值,都可以作为训练数据输入,因此是我们已知的。在整个过程中未知的就是W和b了也是需要通过训练得到的参数。
卷积神经网络的参数因为卷积网络的特性而稍微有些特殊,但整体来讲还是对权重W和偏置b的拟合。
2.卷积层参数个数计算
卷积层是通过卷积核对原始输入进行扫描,然后获得具有局部特征的输出,预测准确性与卷积核的设置有重要关系,因此卷积核就是我们需要拟合的参数,至于参数个数怎么计算,需要细致的进行分解。
(1)卷积核个数
通常用一个卷积核无法获得输入的全部信息,因此通常会设置多个卷积核,每个卷积核都是独立的,计算方式完全一致。每个卷积核对原始输入进行处理后都会生成一个feature_map,因此卷积核的个数和feature_map的个数其实是相同的。
(2)卷积核大小
在二维神经网络中(即图像处理的常用卷积神经网络模式),通常用正方形的卷积核对原始输入进行卷积,常用的有33,55,77等。
(3)原始图像通道数
通道数的不同会影响子卷积核的个数,比如有是三个通道的图像,每一个通道都需要用卷积核进行处理,但卷积核的参数其实是不同的,最终对所有通道进行加和加上一个偏置就是我们最终得到的feature_map,因此参数个数实际变为333+1。其中1代表偏置,在所有通道中是共享的。
(4)最终参数个数
用卷积核个数乘上卷积核大小,其实就是最终的参数个数,本文为2(333+1)。2代表卷积核的个数,第一个3代表通道数,第二个3和第三个3代表卷积核大小,1代表偏置。
3.池化层参数个数计算
池化层为根据池化层大小确定保留值,可以理解为对feature_map的降维,其中不涉及参数的计算。
4.全连接层参数个数计算
全连接层首先对池化层输出的数据进行flattern处理,即40030转换为120001,假设输出为12维的,那么参数个数为1200012+12,加号后边的12代表每个全连接层后都跟一个偏置b。
5.总结
无论是一维、二维还是三维卷积神经网络的哪一层参数计算,都可以用卷积层参数计算的思路解决,首先确定卷积核大小,其次确定卷积核个数,最终确定图像输入的通道数。这几个东西确定后,再求解参数就十分简单了。
本篇文章假设你已经十分了解卷积神经网络的基础知识,因此没有相关的图解,只是介绍了参数确定的思路,希望对大家有所启发。
网友评论