Pytorch基础模块一模型(1)

简介: Pytorch基础模块一模型(1)

深度学习中依赖Pytorch搭建的几个必不可少的模块:

  1. 数据
  2. 模型
  3. 损失函数
  4. 优化器

这里重点总结深度学习中CV模型的基础模块,如卷积层,池化层等…

1 卷积层

目前卷积分为:

  1. 1. 普通卷积:一般用来提取特征,下采样
  2. 2. 反置卷积:一般用来上采样
  3. 3. 空洞卷积:提高感受野
  4. 4. 分组卷积:用于模型加速技术——轻量化模型设计
  5. 5. DW卷积:在MobileNet中首次使用,用来降低计算量
  6. 6. 可变卷积:更准确地提取到我们想要的特征

1.1 普通卷积

1.1.1 原理

6a844395b9a148c189812822b4dca06b.png

三个通道分别与权重矩阵做点成然后相加

1.1.2 Pytorch实现

导入

import torch.nn as nn

构造

 def __init__(
        self,
        in_channels: int,
        out_channels: int,
        kernel_size: _size_2_t,
        stride: _size_2_t = 1,
        padding: _size_2_t = 0,
        dilation: _size_2_t = 1,
        groups: int = 1,
        bias: bool = True,
        padding_mode: str = 'zeros'  # TODO: refine this type
    )

参数

  1. 1. in_channel:输入的深度
  2. 2. out_channels:输出的深度/卷积核的个数
  3. 3. kernel_size:卷积核的大小
  4. 4. stride:步长
  5. 5. padding:填充多少像素
  6. 6. dilation:使用空洞,默认为0,在空洞卷积中使用。
  7. 7. groups:分组,指的是对输入通道进行分组,如果groups=1,那么输入就一组,输出也为一组。如果groups=2,那么就将输入分为两组,那么相应的输出也是两组。另外需要注意的是in_channels和out_channels必须能整除groups。如果group=out_channels,即是DW卷积。
  8. 8. bias:bool,是否使用偏置
  9. 9. padding_mode:填充模式, padding_mode=‘zeros’表示的是0填充

1.2 可变卷积

卷积的位置是可变形的,并非在传统的N × N的网格上做卷积,这样的好处就是更准确地提取到我们想要的特征。

2 池化层

2.1 原理

这里接触最多的就是最大池化层

2cefdb61bbef417380e4667d9e8b9c16.png

假设是2x2的池化,那么用2x2的过滤器遍历图像,每次取值最大的

2.2 函数

构造

class.torch.nn.MaxPool2d(
  kernel_size,
  stride=None,
  padding=0,dilation=1,
  return_indices=False, 
  ceil_mode=False
)

参数

  1. 1. kernel_size:过滤器大小,类似卷积核
  2. 2. stride:窗口的移动步长,默认kernel_size(起到下采样kernel_size倍的作用)
  3. 3. padding:输入的每一条边补充0的层数,主要用于边缘处填充。
  4. 4. dilation:核使用空洞,默认为0。在普通卷积核中不使用。
  5. 5. return_idices:如果等于True,会返回输出最大值对应的序号序列。
  6. 6. ceil_mode:如果等于True,计算输出数据大小的时候,会使用向上取整,代替默认的向下取整的操作

3 激活函数

激活函数种类很多,主要遇到的是ReLU和ReLU6,其它的遇到再总结

3.1 ReLU

3.1.1 原理

函数为f(x) = max{0, x}

image.png

ReLu梯度函数为:

image.png

可以看到,其当函数值为0时梯度小于0,即停止该参数的更新。当函数值为正数时,梯度为1不变,则不会出现梯度消失和爆炸的问题。

3.1.2 函数

构成

torch.nn.ReLU(inplace=True)

参数

  1. 1. inplace 默认为False,计算得到的值不会覆盖之前的值,如果设置为True,则会把计算得到的值直接覆盖到输入中,这样可以节省内存/显存。
  2. 举个例子,假设inplace为True,相当于执行x=x+1,直接将结果赋予原变量,实现覆盖如果为False,则会执行y=x+1,多使用一个变量储存结果。

3.2 ReLU6

3.2.1 原理

函数为f(x) = min{6, max{0, x}}

image.png

3.2.2 原理

构造

torch.nn.ReLU6(inplace=True)  # 参数与上述一致

3.3 sigmod

3.3.1 原理

函数如下:

110be3023726486d84260df3df2df920.png

该函数梯度曲线是:

b0c46c62e4aa4f90b4dceb3ab9c4700e.png

可以看到最大时才1/4,在反向传播过程中,会出现梯队消失的问题。因此,现在很少用sigmod作为激活函数。

3.3.2

构造torch.sigmod(input, out=None)->Tensor

  1. 1. input:输入tensor
    例子
a = torch.rand(4)
torch.sigmod(a)

4 Dropout

随机失活,用于防止过拟合

构造

torch.nn.Dropout(p=0.5, inplace=False)
# p 元素归0的概率
# inplace 详细见激活函数

5 全连接层

目前接触到的好像线性全连接层(result=ax+by+c),用来对网络进行分类,其实基本已经被卷积代替。

5.1 原理

45e80dbd4d204591807ad683cc1ff825.png                        输入矩阵input_dimX1与权重矩阵output_dimXimput_dim相乘,得到output_dimX1。

5.1 构造

构造

torch.nn.Linear(in_features, out_features, bias=True, device=None, dtype=None)

参数

  1. 1. in_features:输入尺寸
  2. 2. out_features:输出尺寸
  3. 3. bias:是否使用偏置,默认为True

5.2 输入

Pytorch中shape=(batch_size, in_features)的张量,前面特征提取后一般是(batch_size,channel, height, width),因此需要经过一次展平操作,将维度变成(batch_size, channelheightwidth)。用到函数torch.flatten

torch.flatten(x, start_dim)
# x 需要展开的数据
# start_dim 从哪一维度开始展开

5.3 输出

shape=(batch_size, out_features)

6 Batch Normalization(BN层)

6.1 使用的原因

  1. 1. **加快网络的训练和收敛的速度:**卷积层输出后由于特征图的变化,图像特征的分布就不一样,使得网络难以收敛。BN层将每层的数据都转换在均值为0,方差为1的状态,收敛更加容易。
  2. 2. **防止过拟合:**批量归一化是针对每个Batch的,因此归一化后batch中的图像不再只取决于自己,而是与同一个batch的所有图片都有关系,一定程度上缓解了过拟合。
  3. 3. 解决在训练过程中,中间层数据分布发生改变的问题,以防止梯度消失或爆炸。

6.2 原理

5cf2dd76f72b481a889f7103617f23ee.png

6.3 构造

torch.nn.BatchNorm2d(input_channels)
# input_channels 输入的通道数

6.4 使用

一般位于卷积层和激活函数之间,为什么?

非线性单元的输出分布形状会在训练过程中变化,归一化无法消除他的方差偏移,相反的,全连接和卷积层的输出一般是一个对称,非稀疏的一个分布,更加类似高斯分布,对他们进行归一化会产生更加稳定的分布。

基本上其余所有结构都是这些结构的堆叠和变化!!!

相关文章
|
3月前
|
机器学习/深度学习 数据采集 人工智能
PyTorch学习实战:AI从数学基础到模型优化全流程精解
本文系统讲解人工智能、机器学习与深度学习的层级关系,涵盖PyTorch环境配置、张量操作、数据预处理、神经网络基础及模型训练全流程,结合数学原理与代码实践,深入浅出地介绍激活函数、反向传播等核心概念,助力快速入门深度学习。
198 1
|
7月前
|
机器学习/深度学习 PyTorch API
PyTorch量化感知训练技术:模型压缩与高精度边缘部署实践
本文深入探讨神经网络模型量化技术,重点讲解训练后量化(PTQ)与量化感知训练(QAT)两种主流方法。PTQ通过校准数据集确定量化参数,快速实现模型压缩,但精度损失较大;QAT在训练中引入伪量化操作,使模型适应低精度环境,显著提升量化后性能。文章结合PyTorch实现细节,介绍Eager模式、FX图模式及PyTorch 2导出量化等工具,并分享大语言模型Int4/Int8混合精度实践。最后总结量化最佳策略,包括逐通道量化、混合精度设置及目标硬件适配,助力高效部署深度学习模型。
1030 21
PyTorch量化感知训练技术:模型压缩与高精度边缘部署实践
|
3月前
|
机器学习/深度学习 存储 PyTorch
Neural ODE原理与PyTorch实现:深度学习模型的自适应深度调节
Neural ODE将神经网络与微分方程结合,用连续思维建模数据演化,突破传统离散层的限制,实现自适应深度与高效连续学习。
161 3
Neural ODE原理与PyTorch实现:深度学习模型的自适应深度调节
|
2月前
|
边缘计算 人工智能 PyTorch
130_知识蒸馏技术:温度参数与损失函数设计 - 教师-学生模型的优化策略与PyTorch实现
随着大型语言模型(LLM)的规模不断增长,部署这些模型面临着巨大的计算和资源挑战。以DeepSeek-R1为例,其671B参数的规模即使经过INT4量化后,仍需要至少6张高端GPU才能运行,这对于大多数中小型企业和研究机构来说成本过高。知识蒸馏作为一种有效的模型压缩技术,通过将大型教师模型的知识迁移到小型学生模型中,在显著降低模型复杂度的同时保留核心性能,成为解决这一问题的关键技术之一。
|
4月前
|
PyTorch 算法框架/工具 异构计算
PyTorch 2.0性能优化实战:4种常见代码错误严重拖慢模型
我们将深入探讨图中断(graph breaks)和多图问题对性能的负面影响,并分析PyTorch模型开发中应当避免的常见错误模式。
258 9
|
6月前
|
机器学习/深度学习 存储 PyTorch
PyTorch + MLFlow 实战:从零构建可追踪的深度学习模型训练系统
本文通过使用 Kaggle 数据集训练情感分析模型的实例,详细演示了如何将 PyTorch 与 MLFlow 进行深度集成,实现完整的实验跟踪、模型记录和结果可复现性管理。文章将系统性地介绍训练代码的核心组件,展示指标和工件的记录方法,并提供 MLFlow UI 的详细界面截图。
260 2
PyTorch + MLFlow 实战:从零构建可追踪的深度学习模型训练系统
|
6月前
|
机器学习/深度学习 PyTorch 算法框架/工具
提升模型泛化能力:PyTorch的L1、L2、ElasticNet正则化技术深度解析与代码实现
本文将深入探讨L1、L2和ElasticNet正则化技术,重点关注其在PyTorch框架中的具体实现。关于这些技术的理论基础,建议读者参考相关理论文献以获得更深入的理解。
182 4
提升模型泛化能力:PyTorch的L1、L2、ElasticNet正则化技术深度解析与代码实现
|
5月前
|
机器学习/深度学习 数据可视化 PyTorch
Flow Matching生成模型:从理论基础到Pytorch代码实现
本文将系统阐述Flow Matching的完整实现过程,包括数学理论推导、模型架构设计、训练流程构建以及速度场学习等关键组件。通过本文的学习,读者将掌握Flow Matching的核心原理,获得一个完整的PyTorch实现,并对生成模型在噪声调度和分数函数之外的发展方向有更深入的理解。
1946 0
Flow Matching生成模型:从理论基础到Pytorch代码实现
|
7月前
|
机器学习/深度学习 PyTorch 编译器
深入解析torch.compile:提升PyTorch模型性能、高效解决常见问题
PyTorch 2.0推出的`torch.compile`功能为深度学习模型带来了显著的性能优化能力。本文从实用角度出发,详细介绍了`torch.compile`的核心技巧与应用场景,涵盖模型复杂度评估、可编译组件分析、系统化调试策略及性能优化高级技巧等内容。通过解决图断裂、重编译频繁等问题,并结合分布式训练和NCCL通信优化,开发者可以有效提升日常开发效率与模型性能。文章为PyTorch用户提供了全面的指导,助力充分挖掘`torch.compile`的潜力。
780 17
|
7月前
|
机器学习/深度学习 搜索推荐 PyTorch
基于昇腾用PyTorch实现CTR模型DIN(Deep interest Netwok)网络
本文详细讲解了如何在昇腾平台上使用PyTorch训练推荐系统中的经典模型DIN(Deep Interest Network)。主要内容包括:DIN网络的创新点与架构剖析、Activation Unit和Attention模块的实现、Amazon-book数据集的介绍与预处理、模型训练过程定义及性能评估。通过实战演示,利用Amazon-book数据集训练DIN模型,最终评估其点击率预测性能。文中还提供了代码示例,帮助读者更好地理解每个步骤的实现细节。

热门文章

最新文章

推荐镜像

更多