[DNN]CNN的结构分析和参数量计算


资料来源:
LeNet5分析
CNN参数计算

主要想要自己总结一下一个神经网络的参数如何计算。

1.概述

  • DNN的参数量:与神经元的个数无关,只与卷积核的大小及Feature Map的个数相关。决定了最终输出模型的大小(空间复杂度)
  • DNN的连接次数:只与神经元的个数相关,神经元的个数也就是特征图的大小决定了模型推理时的计算复杂度。也就是代码中常见的FLOPS数。

1.1参数量计算方法

(基础)激活层的参数计算
一个神经元的激活层,如果输入为m个向量,那么涉及到的参数为输入向量的权值wi,偏置值bk,参数数量为m+1。
在这里插入图片描述
在这里插入图片描述

(1)卷积层计算方法:
卷积的计算过程包括:卷积核与图像对应区域求内积之后,加上一个偏置bias后送入激活函数。

因此,卷积涉及到的参数包括:卷积核的参数,偏置bias。
在这里插入图片描述
(2)全连接层的参数计算方法:
全连接层的计算过程包括:输入的信号值与输出的m个神经元权值相乘后相加,然后再加上偏置bias,最后送入激活函数。得到输出信号值。

所以全连接层的参数涉及:神经元的权值和偏置bias。
在这里插入图片描述
(3)池化层计算方法
池化层就是pooling后下采样,本身并没有参数,但是下采样之后,需要乘上权值后加一个偏置后进入激活层。因此引入了2个参数。
在这里插入图片描述
(4)RBF连接
与一般的全连接的区别在于,径向基神经网络没有偏置量。假设输入为m,输出为n,参数量就是m*n。
在这里插入图片描述
在这里插入图片描述

1.2神经元数量计算

对于卷积层来说,神经元的数量只与卷积层输出的feature map的尺寸有关,如果输出的feature map为10x10x1,那么该卷积层的神经元个数就是100。
在这里插入图片描述

1.3 连接数量计算/FLPOS

连接指的是参数与参数之间的交互次数。也就决定了模型推理1次所需要的算力。

例如LeNet5的第1个卷积层。
在这里插入图片描述

连接次数:(5*5+1)*6   *(28*28)=122,304

卷积操作的可训练参数是(5*5+1)*6

左边是卷积的可训练参数,右边是C1层每个feature map的神经元个数,左右对应关系是1对28*28,相乘即为连接数。(每个链接对应1次计算,由wa+b可知,每个参数参与1次计算,所以1个单位的偏置b也算进去)

2.LeNet5结构和参数量计算

2.1 结构

在这里插入图片描述

  • 输入图片:32*32
  • 卷积层C1:size=5*5,channel=(6,6,6,6,6,6),num=6,stride=1,padding=0
  • 下采样层S2:2*2,stride=2
  • 卷积层C3:size=5*5,channel=(3,…,3,4,…,4,6),num=16,stride=1,padding=0
  • 下采样层S4:2*2,stride=2
  • 卷积层C5:size=5*5,channel=(16,16,16,…16),num=120,stride=1,padding=0
  • 全连接层F6:input=120,output=84
  • 全连接层F7(output,径向基神经元):input=84,output=10

2.2 对应的参数量计算:

C1: (5x5+1)x6=156	

每个卷积运算加上激活函数需要5x5+1,一共6个卷积核,所以(5x5+1)x6

S2:6x2=12

每一个图对应一个权值和一个偏置bias,一共6个,所以参数是6x2=12.

C3: (5x5x3+1)x6+(5x5x4+1)x6+ (5x5x4+1)x3+(5x5x6+1)x1=456+606+303+152=1516 

这里有16个卷积核,通道数不仅相同,如表所示。
表1:C3的卷积对应关系
表1

S4:2x16=32

每一个图对应一个权值和一个偏置bias,一共16个,所以参数是32。

C5:(5x5x16+1)x120=48120

每一个卷积核都有16个channel,再加上一个偏置。共计120个卷积核。

F6:(120+1)x84=10164

对于每一个输出值而言,120个权重和1个偏置,输出一共84个输出值。

F7:84x10=840

最后一个输出层,由于是径向基神经元,所以只有输入84个权重,一共10个输出值。84*10.

共计参数量:156+12+1516+32+48120+10164+840=60840。
注意到全连接层的参数量占用总参数量的97.2%。

2.3 连接数量/FLOPS

LeNet5的第一个卷积层。

C1:156x28x28

卷积操作的参数一共有(5x5+1)*6次,输出的feature map尺寸是28x28。乘起来就是总的连接数量。

S2: (2x2+1)x6x14x14

一次池化操作需要对原图像的2x2个像素进行操作,输出的feature map尺寸是14x14

C3:1516x10x10=151600
S4:(2x2+1)x16x5x5=2000
C5:48120*1*1=48120
F6:10164*1*1=10164
out:84*10=840

猜你喜欢

转载自blog.csdn.net/condom10010/article/details/129388131