【PyTorch】04模型搭建

4 PyTorch模型搭建

4.1 网络模型创建

【PyTorch】3.1 模型创建

图像分类的经典网络模型:【可以查看使用torchvision.models里面实现的AlexNet、VGG、GoogleNet、ResNet、DenseNet等】

alexnet=torchvision.models.AlexNet()

densenet=torchvision.models.DenseNet()

【PyTorch】04模型搭建_第1张图片

  • 方法1:初始化(构建子模块)
  • 方法2:前向传播(拼接子模块)
    【PyTorch】04模型搭建_第2张图片

4.2 nn.Module

所有网络层基类,管理网络属性

  1. 一个module可以包含多个子module
  2. 一个module相当于一个运算,必须实现forward()函数
  3. 每个module都有8个字典管理它的属性

【PyTorch】3.1 nn.Module

  • parameters:存储管理nn.Parameter类,如权值与偏置参数

  • modules:存储管理nn.Module类,如卷积层与池化层

  • buffers:存储管理缓冲属性,如BN层中的running_mean

  • ***_hooks:存储管理钩子函数
    【PyTorch】04模型搭建_第3张图片

4.3 模型容器Containers

【PyTorch】3.2 模型容器与AlexNet创建

nn.Sequential顺序性,各网络层之间严格按顺序执行,常用于block构建

nn.ModuleList迭代性,常用于大量重复网络层构建,通过for循环实现重复构建

nn.ModuleDict索引性,常用于可选择的网络层

【PyTorch】04模型搭建_第4张图片

  • nn.Sequential:用于按顺序包装一组网络层

    • 顺序性:各网络层之间严格按照顺序构建
    • 自带forward():自带的forward()里,通过for循环依次执行前向传播运算
      【PyTorch】04模型搭建_第5张图片
  • nn.ModuleList:用于包装一组网络层,以迭代方式调用网络层

    主要方法:

    • append():在ModuleList后面添加网络层
    • extend():拼接两个ModuleList
    • insert():指定在ModuleList中位置插入网络层
  • nn.ModuleDict:用于包装一组网络层,以索引方式调用网络层

    主要方法:

    • clear():清空ModuleDict
    • items():返回可迭代的键值对(key-value pairs)
    • keys():返回字典的键(key)
    • values():返回字典的值(value)
    • pop():返回一对键值,并从字典中删除

4.4 卷积层

卷积运算:卷积核在输入信号(图像)上滑动,对应位置上进行相乘相加

卷积核:又称为滤波器、过滤器,可认为是某种模式、某种特征

卷积过程类似于用一个模板去图像上寻找与它相似的区域,与卷积核模式越相似,激活值越高,从而实现特征提取

【PyTorch】3.3 nn网络层-卷积层

AlexNet卷积核可视化,发现卷积核学习到的是边缘、条纹、色彩这些细节特征
【PyTorch】04模型搭建_第6张图片

4.4.1 1d/2d/3d卷积

卷积维度:一般情况下,卷积核在几个维度上滑动,就是几维卷积

  • 1d(1维)卷积
  • 2d(2维)卷积
  • 3d(3维)卷积

【PyTorch】04模型搭建_第7张图片

4.4.2 卷积-nn.Conv2d()

  • nn.Conv2d()
    【PyTorch】04模型搭建_第8张图片
    功能:对多个二维信号(图像)进行二维卷积

    参数说明:

    • in_channels:输入通道数
    • out_channels:输出通道数,等于卷积核个数
    • kernel_size:卷积核尺寸
    • stride:步长
    • padding:填充幅度,以保持输入图像与输出图像尺寸不变
    • dilation:空洞卷积大小,以提升感受野
    • groups:分组卷积设置组数
    • bias:偏置
  • 卷积运算后的特征图输出尺寸计算公式
    在这里插入图片描述
    其中,W为输入图像的尺寸(W),F为卷积核尺寸(kernel_size),P为填充幅度(padding),S为步长(stride)
    image-20220517173407172

4.4.3 转置卷积-nn.ConvTranspose

  • nn.ConvTranspose2d()
    【PyTorch】04模型搭建_第9张图片
    功能:转置卷积实现图像上采样(UpSample)

    参数说明:

    • in_channels:输入通道数
    • out_channels:输出通道数,等于卷积核个数
    • kernel_size:卷积核尺寸
    • stride:步长
    • padding:填充幅度,以保持输入图像与输出图像尺寸不变
    • dilation:空洞卷积大小,以提升感受野
    • groups:分组卷积设置组数
    • bias:偏置
  • 转置卷积运算后的特征图输出尺寸计算公式
    image-20220517173550065

4.5 池化层

池化运算:对信号(图像)进行“收集”并“总结”,类似水池收集水资源,因而得名池化层

  • “收集":多变少(下采样)
  • ”总结":最大值/平均值

【PyTorch】3.4 nn网络层-池化层

【PyTorch】04模型搭建_第10张图片

  • nn.MaxPool2d()

    功能:对二维信号(图像)进行最大值池化(下采样)

    参数说明:

    • kernel_size:池化窗口尺寸
    • stride:步长
    • padding:填充幅度
    • dilation:池化窗口间隔大小
    • return_indices:记录最大池化像素索引
    • ceil_mode:默认尺寸向下取整,设为True时,则尺寸向上取整
  • nn.AvgPool2d()
    【PyTorch】04模型搭建_第11张图片
    功能:对二维信号(图像)进行平均值池化(下采样)

    参数说明:

    • kernel_size:池化窗口尺寸
    • stride:步长
    • padding:填充幅度
    • ceil_mode:默认尺寸向下取整,设为True时,则尺寸向上取整
    • count_include_pad:是否采用填充值用于计算
    • divisor_override:除法因子
  • nn.MaxUnpool2d()
    【PyTorch】04模型搭建_第12张图片
    功能:对二维信号(图像)进行最大值反池化(上采样)

    参数说明:

    • kernel_size:池化窗口尺寸
    • stride:步长
    • padding:填充幅度

4.6 全连接层

全连接层又称为线性层其每个神经元与上一层所有神经元相连实现对前一层的线性组合(线性变换)

【PyTorch】3.4 nn网络层-全连接层

  • nn.Linear()
    在这里插入图片描述
    功能:对一维信号(向量)进行线性组合

    参数说明:

    • in_features:输入结点数
    • out_features:输出结点数
    • bias:是否需要偏置

    计算公式: y = x W T + b i a s y=xW^T+bias y=xWT+bias

4.7 激活函数层

激活函数对特征进行非线性变换,赋予多层神经网络具有深度的意义

【PyTorch】3.4 nn网络层-激活函数层

  • nn.Sigmoid()
    【PyTorch】04模型搭建_第13张图片
    计算公式: y = 1 1 + e − x y=\frac{1}{1+e^{-x}} y=1+ex1

    梯度公式: y ′ = y ∗ ( 1 − y ) y'=y*(1-y) y=y(1y)

    特性:

    • 输出值在(0,1),符合概率
    • 导数范围是[0,0.25],易导致梯度消失
    • 输出为非0均值,破坏数据分布
  • nn.tanh()
    【PyTorch】04模型搭建_第14张图片
    计算公式: y = s i n x c o s x = e x − e − x e x + e − x = 2 1 + e − 2 x + 1 y=\frac{sinx}{cosx}=\frac{e^x-e^{-x}}{e^x+e^{-x}}=\frac{2}{1+e^{-2x}}+1 y=cosxsinx=ex+exexex=1+e2x2+1

    梯度公式: y ′ = 1 − y 2 y'=1-y^2 y=1y2

    特性:

    • 输出值在(-1,1),数据符合0均值
    • 导数范围是(0,1),易导致梯度消失
  • nn.ReLU()
    【PyTorch】04模型搭建_第15张图片
    计算公式 y = { x ( x > 0 ) 0 ( x ≤ 0 ) y = \left\{ {\begin{array}{cc} {x \enspace (x \gt 0)}\\ {0 \enspace (x \le 0)} \end{array}} \right. y={x(x>0)0(x0)

    梯度公式: y ′ = { 1 ( x > 0 ) 0 ( x ≤ 0 ) y' = \left\{ {\begin{array}{cc} {1 \enspace (x \gt 0)}\\ {0 \enspace (x \le 0)} \end{array}} \right. y={1(x>0)0(x0)

    特性:

    • 输出值均为正数,负半轴导致死神经元
    • 导数是1,缓解梯度消失,但易引发梯度爆炸
  • nn.LeakyReLU()

    • negative_slope:负半轴斜率
  • nn.PReLU()

    • init:可学习斜率
  • nn.RReLU()

    • lower:均匀分布下限
    • upper:均匀分布上限

    【PyTorch】04模型搭建_第16张图片

你可能感兴趣的:(PyTorch学习笔记,pytorch,深度学习,神经网络)