卷积神经网络卷积层池化层全连接层理解

1、卷积层
作用:提取图像特征,学习卷积核权重,根据目标函数提取想要的特征
卷积核作用:

  1. 降维或者升维,实现跨通道的交互和信息整合
  2. 以较小的参数代价加深加宽了深度学习网络层数,加入更多的非线性信息

2、池化层
作用:

  1. 特征不变性-使模型更加关注某些特征而不是具体位置,筛选重要特征
  2. 特征降维-使得模型可以抽取更广范围特征
  3. 防止过拟合发生

3、全连接层
作用:

  1. 全连接层相当于一个分类器,卷积层、池化层和激活层将原始数据映射到隐层特征空间,全连接层将学到的分布式特征表示映射到样本标记空间
  2. 由于全连接层参数冗余(仅全连接层参数就可占整个网络参数80%左右),近期一些性能优异的网络模型如ResNet和GoogLeNet等均用全局平均池化(GAP)取代FC来融合学到的深度特征,最后仍用softmax等损失函数作为网络目标函数来指导学习过程。
  3. 将前面经过多次卷积后高度抽象化的特征进行整合,然后进行归一化,对各种分类情况都输出一个概率,之后的分类器(Classifier)可以根据全连接得到的概率进行分类。

神经网络函数含义:
nn.Conv2d作用提取特征

Conv2d,就是用来实现2d卷积操作的。
in_channels —— 输入的channels数
out_channels —— 输出的channels数
kernel_size ——卷积核的尺寸,可以是方形卷积核、也可以不是,下边example可以看到
stride —— 步长,用来控制卷积核移动间隔
padding ——输入边沿扩边操作
padding_mode ——扩边的方式
bias ——是否使用偏置(即out = wx+b中的b)

nn.Sigmoid()激活函数解决线性不可分的问题
nn.AvgPool2d()二维平均池化操作 特征不变性,特征降维

torch.nn.AvgPool2d( 
kernel_size , 
stride=None , 
padding=0 , 
ceil_mode=False , 
count_include_pad=True , 
divisor_override=None )
kernel_size:池化核的尺寸大小
stride:窗口的移动步幅,默认与kernel_size大小一致
padding:在两侧的零填充宽度大小
ceil_mode:设为True时,在计算输出形状的过程中采用向上取整的操作
count_include_pad:布尔类型,当为True时,将在平均池化计算中包括零填充

torch.nn.Flatten(start_dim=1, end_dim=- 1)
作用:将连续的维度范围展平为张量

经常在nn.Sequential()中出现,一般写在某个神经网络模型之后,
用于对神经网络模型的输出进行处理,得到tensor类型的数据。

nn.Sequential()
一个序列容器,用于搭建神经网络的模块被按照被传入构造器的顺序添加到nn.Sequential()容器中。

model = nn.Sequential(
          nn.Conv2d(1,20,5),
          nn.ReLU(),
          nn.Conv2d(20,64,5),
          nn.ReLU()
        )

nn.Linear()函数作用在全连接层

nn.Linear表示的是线性变换,原型就是初级数学里学到的线性函数:y=kx+b
nn.Linear()运行的真正的计算就是:output = weight @ input + bias
@: 在python中代表矩阵乘法
input: 表示输入的Tensor,可以有多个维度
weights: 表示可学习的权重,shape=(output_feature,in_feature)
bias: 表示科学习的偏置,shape=(output_feature)
in_feature: nn.Linear 初始化的第一个参数,即输入Tensor最后一维的通道数
out_feature: nn.Linear 初始化的第二个参数,即返回Tensor最后一维的通道数
output: 表示输入的Tensor,可以有多个维度

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