全连接层、卷积层、池化层

深度学习

基础知识和各种网络结构实战 ...

前言

全连接层、卷积层、池化层用pytorch实现

一、全连接层

1.1 全连接层概念

全连接层 Fully Connected Layer 一般位于整个卷积神经网络的最后,负责将卷积输出的二维特征图转化成一维的一个向量,由此实现了端到端的学习过程(即:输入一张图像或一段语音,输出一个向量或信息)。全连接层的每一个结点都与上一层的所有结点相连因而称之为全连接层。由于其全相连的特性,一般全连接层的参数也是最多的。

1.2 主要作用

全连接层的主要作用就是将上层(卷积、池化等层)计算得到的特征空间映射样本标记空间。简单的说就是将特征表示整合成一个值,其优点在于减少特征位置对于分类结果的影响,提高了整个网络的鲁棒性。

二、卷积层

卷积层与全连接层不同,它保留了输入图像的空间特征,即输入一张32 * 32 * 3的图片而言,卷积层输入就是32 * 32 * 3的矩阵
卷积核(Keral):常简称为卷积,有时也叫滤波器filter,卷积的大小可以在实际需要时自定义其长和宽(常将其设为:1 * 1,3 * 3,5 * 5),其通道数常与输入图片通道数设置一样

2.1 pytorch中的卷积函数

import torch
torch.nn.Conv2d(in_channels, out_channels, kernel_size, stride=1, padding=0, dilation=1, groups=1, bias=True)
# in_channels (int) :输入图片的channel
# out_channels (int) :输出图片(特征层)的channel
# kernel_size (int or tuple) :kernel卷积核的大小
# stride (int or tuple, optional) :卷积的步长,默认为1
# padding (int or tuple, optional) :四周pad的大小,默认为0
# dilation (int or tuple, optional) :kernel元素间的距离,默认为1(dilation翻译为扩张,有时候也称为“空洞”,有专门的文章研究dilation convolution)
# groups (int, optional) :将原始输入channel划分成的组数,默认为1(初级读者暂时可以不细究其用处)
# bias (bool, optional) :如果是Ture,则输出的bias可学,默认为 True

三、池化层

池化pooling是对图片进行压缩(降采样)的一种方法,池化的方法有很多,如max pooling、average pooling
池化层也有操作参数,我们假设输入图像为W1H1D1(宽通道数),池化层的参数中,池化kernel的大小为F*F,步长为S,
那么经过池化后输出的图像的宽、高、channel分别为:W2=((W1-F)/S)+1 H2=((H1-F)/S)+1 D2=D1
通常情况下F=2,=2,

3.1 pytorch实现

import torch
import torch.nn.functional as F
import torch.nn as nn

class Net(nn.Module):

    def __init__(self):
        super(Net,self).__init__()
        self.conv1=nn.Conv2d(3,6,5)#卷积层1
        self.pool=nn.MaxPool2d(2,2)#池化
        self.conv2=nn.Conv2d(6,16,5)
        self.fc1 = nn.Linear(16 * 5 * 5, 120)  # 全连接层
        self.fc2 = nn.Linear(120, 84)  # 全连接层
        self.fc3 = nn.Linear(84, 10)  # 最后一个全连接层用作10分类

    def forward(self, x):  # 使用__init__中的定义,构建卷积神经网络结构
        x = self.pool(F.relu(self.conv1(x)))  # 第一个卷积层首先要经过relu做激活,然后使用前面定义好的nn.MaxPool2d(2, 2)方法做池化
        x = self.pool(F.relu(self.conv2(x)))  # 第二个卷积层也要经过relu做激活,然后使用前面定义好的nn.MaxPool2d(2, 2)方法做池化
        x = x.view(-1, 16 * 5 * 5)  # 对特征层tensor维度进行变换
        x = F.relu(self.fc1(x))  # 卷积神经网络的特征层经过第一次全连接层操作,然后再通过relu层激活
        x = F.relu(self.fc2(x))  # 卷积神经网络的特征层经过第二次全连接层操作,然后再通过relu层激活
        x = self.fc3(x)  # 卷积神经网络的特征层经过最后一次全连接层操作,得到最终要分类的结果(10类标签)
        return x

net = Net()

四、批量范化层

批量范化层(BatchNorm)是2015年loffe和Szegedy提出的想法,主要是为了加速神经网络的收敛过程以及提高训练中的稳定性。

总结

期待大家和我交流,留言或者私信,一起学习,一起进步!

猜你喜欢

转载自blog.csdn.net/CltCj/article/details/118313932