深度学习-卷积神经网络CNN计算输出特征大小以及参数数量

链接:https://blog.csdn.net/sinat_42239797/article/details/90646935

计算其每一层的特征大小及参数数量的方法

nn.Conv2d(in_channels=3,out_channels=96,kernel_size=12,stride=4,padding=2)

卷积一层的几个参数:
in_channels=3:表示的是输入的通道数,由于是RGB型的,所以通道数是3.
out_channels=96:表示的是输出的通道数,设定输出通道数的96(这个是可以根据自己的需要来设置的)
kernel_size=12:表示卷积核的大小是12x12的,也就是上面的 “F”, F=12
stride=4:表示的是步长为4,也就是上面的S, S=4
padding=2:表示的是填充值的大小为2,也就是上面的P, P=2

卷积神经网络的计算公式为:(计算输出的特征大小)
N=(W-F+2P)/S+1
其中N:输出大小
W:输入大小
F:卷积核大小
P:填充值的大小
S:步长大小

假如你的图像的输入size是256x256的,由计算公式知N=(256-12+2x2)/4+1=63,也就是输出size为63x63的

输出特征图大小 = (输入特征图大小 - 卷积核大小(高或宽) + 2 x padding) / stride + 1

​ 63 = ( 256 — 12 + 2*2 ) / 4 + 1

参数数量 = 输入通道数 x 输出通道数 x 卷积核大小(高x宽) + 输出通道数

​ 1299 = 3 * 3 * 12 *12 + 3

作业练习题目—卷积神经网络

共4层,包括两个卷积层Conv2D,两个最大池化层MaxPool2d
model = Sequential(
    Conv2D(3,32,3,bias=True),
    MaxPool2d(2,stride=2),
    Conv2D(32,64,(3,3)),
    MaxPool2d(2,stride=2)
)

(1)第一层卷积层Conv2D(3,32,3,bias=True)

Conv2D(3,32,3,bias=True)
即
Conv2D(in_channels=3,out_channels=32,kernel_size=3,bias=True)

其中输入的通道数in_channels=3,输出的通道数out_channels=32,卷积核的大小(KH*KW)是3x3的即kernel_size=3
步长stride默认为1,填充值padding默认为0

  • 3:输入特征图的通道数,即输入特征图的深度。
  • 32:输出特征图的通道数,即卷积核的数量,也是输出特征图的深度。
  • 3:卷积核的大小,即卷积核的高度和宽度。
  • bias=True:表示该层是否包含偏置项。

假设输入224X224X3

第一层卷积层Conv2D(3,32,3,bias=True)计算输出特征和参数数量:

假设输入224X224X3,输入通道数为3,输出通道数为32,卷积核大小高度和宽度都为3**(即卷积核为3x3)**

输出特征图大小 = (输入特征图大小 - 卷积核高度或宽度大小(KH) + 2 x padding) / stride + 1

​ =(224-3+2*0)/1+1=222

参数数量 = 输入通道数 x 输出通道数 x 卷积核大小(KH*KW) + 输出通道数

​ =3x32x3x3+32=896

输出特征 222x222x32

(2)第二层最大池化层MaxPool2d(2,stride=2):

MaxPool2d(2,stride=2)
参数 2 表示池化核的大小,即池化核大小2x2,stride=2 表示步长为 2
第二层MaxPool2d(2,stride=2)计算输出特征和参数数量:

由上面一层Conv2D可知当前输入为222x222x32 池化核大小2x2 步长stride为2

输出特征图大小 = (输入特征图大小 - 池化核大小) / stride + 1

​ =(222-2)/2+1=111

池化层没有参数

输出特征 111x111x32

(3)第三层卷积层Conv2D(32,64,(3,3))

Conv2D(32,64,(3,3))
`32`:输入特征图的通道数,即输入特征图的深度。
`64`:输出特征图的通道数,即卷积核的数量,也是输出特征图的深度。
`(3,3)`:卷积核的大小,即卷积核的高度x宽度(3x3)。
第三层卷积层Conv2D(32,64,(3,3))计算输出特征和参数数量:

由上面一层MaxPool2d可知当前输入为111x111x32

输入通道数为32,输出通道数为64,卷积核大小3x3 (即高度KH * 宽度KW)

输出特征图大小 = (输入特征图大小 - 卷积核高度或宽度大小(KH) + 2 x padding) / stride + 1

​ =(111-3+2*0)/1+1=109

参数数量 = 输入通道数 x 输出通道数 x 卷积核大小(KH*KW) + 输出通道数

​ =32x64x3x3+64=18496

输出特征 109x109x64

(4)第四层最大池化层MaxPool2d(2,stride=2):

MaxPool2d(2,stride=2)
参数 2 表示池化核的大小,即池化核大小2x2,stride=2 表示步长为 2
第四层最大池化层MaxPool2d(2,stride=2)计算输出特征和参数数量:

由上面一层Conv2D可知当前输入为109x109x64 池化核大小2x2 步长stride为2

输出特征图大小 = (输入特征图大小 - 池化核大小) / stride + 1

​ =(111-2)/2+1=54 ((111-2)/2=53 向下取整)

池化层没有参数

输出特征 54x54x64

注意:计算输出特征图大小时,当遇到除法得不到整数时,应向下取整

你可能感兴趣的:(深度学习,cnn,神经网络)