栏目分类:
子分类:
返回
名师互学网用户登录
快速导航关闭
当前搜索
当前分类
子分类
实用工具
热门搜索
名师互学网 > IT > 软件开发 > 后端开发 > Python

【PyTorch】04模型搭建

Python 更新时间: 发布时间: IT归档 最新发布 模块sitemap 名妆网 法律咨询 聚返吧 英语巴士网 伯小乐 网商动力

【PyTorch】04模型搭建

4 PyTorch模型搭建 4.1 网络模型创建

【PyTorch】3.1 模型创建

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

alexnet=torchvision.models.AlexNet()

densenet=torchvision.models.DenseNet()

  • 方法1:初始化(构建子模块)
  • 方法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:存储管理钩子函数

4.3 模型容器Containers

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

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

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

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

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

    • 顺序性:各网络层之间严格按照顺序构建
    • 自带forward():自带的forward()里,通过for循环依次执行前向传播运算
  • 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卷积核可视化,发现卷积核学习到的是边缘、条纹、色彩这些细节特征

4.4.1 1d/2d/3d卷积

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

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

4.4.2 卷积-nn.Conv2d()
  • nn.Conv2d()

    功能:对多个二维信号(图像)进行二维卷积

    参数说明:

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

    其中,W为输入图像的尺寸(W),F为卷积核尺寸(kernel_size),P为填充幅度(padding),S为步长(stride)

4.4.3 转置卷积-nn.ConvTranspose
  • nn.ConvTranspose2d()

    功能:转置卷积实现图像上采样(UpSample)

    参数说明:

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

4.5 池化层

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

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

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

  • nn.MaxPool2d()

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

    参数说明:

    • kernel_size:池化窗口尺寸
    • stride:步长
    • padding:填充幅度
    • dilation:池化窗口间隔大小
    • return_indices:记录最大池化像素索引
    • ceil_mode:默认尺寸向下取整,设为True时,则尺寸向上取整
  • nn.AvgPool2d()

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

    参数说明:

    • kernel_size:池化窗口尺寸
    • stride:步长
    • padding:填充幅度
    • ceil_mode:默认尺寸向下取整,设为True时,则尺寸向上取整
    • count_include_pad:是否采用填充值用于计算
    • divisor_override:除法因子
  • nn.MaxUnpool2d()

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

    参数说明:

    • 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()

    计算公式: y = 1 1 + e − x y=frac{1}{1+e^{-x}} y=1+e−x1​

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

    特性:

    • 输出值在(0,1),符合概率
    • 导数范围是[0,0.25],易导致梯度消失
    • 输出为非0均值,破坏数据分布
  • nn.tanh()

    计算公式: 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+e−xex−e−x​=1+e−2x2​+1

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

    特性:

    • 输出值在(-1,1),数据符合0均值
    • 导数范围是(0,1),易导致梯度消失
  • nn.ReLU()

    计算公式: 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(x≤0)​

    梯度公式: 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(x≤0)​​

    特性:

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

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

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

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

转载请注明:文章转载自 www.mshxw.com
本文地址:https://www.mshxw.com/it/920685.html
我们一直用心在做
关于我们 文章归档 网站地图 联系我们

版权所有 (c)2021-2022 MSHXW.COM

ICP备案号:晋ICP备2021003244-6号