卷积神经网络的层级结构
• 数据输入层/ Input layer
• 卷积计算层/ CONV layer
• ReLU激励层 / ReLU layer
• 池化层 / Pooling layer
• 全连接层 / FC layer
Pytorch中的卷积模块为nn.Conv2d,里面常用的参数有5个,分别是in_channels,out_channels,kernel_size,stride,padding,除此之外还有参数dilation,groups,bias.
in_channels对应的是输入数据体的深度;out_channels表示输出数据体的深度;kernel_size表示滤波器(卷积核)的大小,可以使用一个数字来表示高和宽度相同的卷积核,例如kernel_size=3,也可以用不同的数字来表示高和宽不同的卷积核,例如kernel_size=(3,2);stride表示滑动的步长;padding=0表示四周不进行零填充,padding=1表示四周进行一个像素点的零填充;bias是一个布尔值,默认为True,表示使用偏置(y=wx+b中的b)groups表示输出数据体深度上和输入数据体深度上的联系,默认groups=1,也就是所有的输出和输入都是有关联的,如果groups=2,这表示输入的深度被分割成两部分,他们之间分别对应起来,所以要求输出和输入都必须要能被groups整除;dilation表示卷积对于输入数据体的空间间隔,默认为1 。
nn.Conv2d(in_channels, out_channels, kernel_size, stride=1, padding=0, dilation=1, groups=1, bias=True, padding_mode='zeros')
池化层夹在连续的卷积层中间, 用于压缩数据和参数的量,减小过拟合。简而言之,如果输入是图像的话,那么池化层的最主要作用就是压缩图像。
这里再展开叙述池化层的具体作用。
1. 特征不变性,也就是我们在图像处理中经常提到的特征的尺度不变性,池化操作就是图像的resize,平时一张狗的图像被缩小了一倍我们还能认出这是一张狗的照片,这说明这张图像中仍保留着狗最重要的特征,我们一看就能判断图像中画的是一只狗,图像压缩时去掉的信息只是一些无关紧要的信息,而留下的信息则是具有尺度不变性的特征,是最能表达图像的特征。
2. 特征降维,我们知道一幅图像含有的信息是很大的,特征也很多,但是有些信息对于我们做图像任务时没有太多用途或者有重复,我们可以把这类冗余信息去除,把最重要的特征抽取出来,这也是池化操作的一大作用。
3. 在一定程度上防止过拟合,更方便优化。
nn.MaxPool2d()表示网络中的最大值池化,其中的参数有kernel_size,stride,padding,dilation,return_indices,ceil_mode。其中的kernel_size,stride,padding,dilation之前的卷积层已经介绍过。return_indices表示是否返回最大值所处的下标,默认为False;ceil_mode表示使用一些方格代替层结构,默认为False,一般不会设置这类参数;nn.AvgPool2d()表示均值池化,里面的参数跟nn.MaxPool2d()类似,但是多一个参数count_include_pad,表示计算均值的时候是否包含零填充,默认为True.池化层用的方法有Max pooling 和 average pooling,而实际用的较多的是Max pooling。
nn.MaxPool2d(kernel_size, stride, padding,dilation,return_indices=False,ceil_mode=False)
全连接层:两层之间所有神经元都有权重连接,通常全连接层在卷积神经网络尾部。也就是跟传统的神经网络神经元的连接方式是一样的:
一般CNN结构依次为
1.INPUT
2.[[CONV -> RELU]*N -> POOL?]*M
3.[FC -> RELU]*K
4.FC
by PengSW_10 on 2019/4/5