首页 > 编程知识 正文

cnn卷积神经网络图,卷积和池化的作用

时间:2023-05-06 04:46:32 阅读:27808 作者:3298

使用卷积神经网络时,需要明确卷积层输入输出的尺寸关系,计算公式如下。

这样抽象,举个例子,这是pytorch官方给出的手写字识别的网络结构:

3359 py torch.org/tutorials/beginner/blitz/neural _ networks _ tutorial.html # sphx-glr-beginner-blitz-nener

这里是网络结构图:

这是对应的代码:

importtorchimporttorch.nnasnnimporttorch.nn.functionalasfclassnet (nn.module ) : def __init__(self ) 333333330 6 output channels,5x5square convolution # kernel self.con v1=nn.conv 2d5) self.con v2=nn.conv 2d (6,16,5 ) anaffinv 120 )5*5fromimagedimensionself.fc2=nn.linear (120,84 ) self.fc3=nn.linear (84,10 ) defforward ) self,fcf 10 ) self 2) windowx=f.max_pool2d(f.relu ) self.conV1(x ),(2) ) # If the size is a square,youcanspecifywithasion 2 ) x=torch.flatten(x ) x,1 ) flattenalldimensionsexceptthebatchdimensionx=f.relu (self.fc1 ) x ) x=f.relu

第一个参数是输入通道数,第二个参数是输出通道数,第三个参数是卷积核大小。

torch.nn.conv2d(in_channels,out_channels,kernel_size,stride=1,padding=0,dilation=1,groups=1)

然后带着公式计算

H=(32 - 5 2 * 0)/1 1=28

W=(32 - 5 2 * 0)/1 1=28

D=6

折叠后尺寸为28、28、6

然后进行池化,x=f.max _ pool 2d (f.relu (self.con v1 (x ),2,2 ) )的池化,即每2x2个区域取一个值。 下图是最大池化的过程

此时,尺寸为(14、14、6 )

接着进行第2次卷积,输入尺寸(32、32、1 )的图像,对应的代码为self.conv2=nn.conv2d ) 6、16、5,带入公式进行计算

H=(14 - 5 2 * 0)/1 1=10

W=(14 - 5 2 * 0)/1 1=10

D=16

折叠后尺寸为[10、10、16]

然后进行第二次池化,是使用x=f.max _ pool 2d (f.relu (self.con v2 (x )、2 )、也(2、2 ) )的池化,池化后为) 5、5、16 )

即,与下一个所有连接层对应的输入self.fc1=nn.linear (16 *5* 5,120 )

版权声明:该文观点仅代表作者本人。处理文章:请发送邮件至 三1五14八八95#扣扣.com 举报,一经查实,本站将立刻删除。