Lazy loaded imagePyTorch深度学习入门笔记P15-25
2025-8-10
| 2025-8-10
字数 2575阅读时长 7 分钟
type
status
date
slug
summary
tags
category
icon
password
@ZZHow(ZZHow1024)
参考课程:
PyTorch深度学习快速入门教程【小土堆】

P15. 神经网络的基本骨架-nn.Module的使用

  • 前向传播:input → forward → output

P16. 土堆说卷积操作

  • 概念:卷积是一种数学运算,广泛应用于信号处理、图像处理和深度学习(尤其是卷积神经网络CNN)。其核心思想是:用一个小的“滑动窗口”(卷积核/滤波器)在输入数据上滑动,计算局部区域的加权和,从而提取局部特征。
  • 核心组件
    • 输入(Input)
      • 形式:通常是多维数组(如图像是2D矩阵,视频是3D张量)。
    • 卷积核(Kernel/Filter)
      • 作用:提取输入的局部特征(如边缘、颜色变化)。
    • 卷积操作(Convolution Operation)
      • 步骤
          1. 滑动窗口:卷积核在输入上按步长(stride)滑动(如步长=1时逐像素移动)。
          1. 局部相乘求和:卷积核与当前覆盖的输入区域逐元素相乘后求和,得到输出的一个值。
          1. 填充(Padding)(可选):在输入边缘填充0,控制输出尺寸。
    • 输出(Feature Map)
      • 作用:卷积操作的结果,表示输入数据在特定特征上的响应强度。
  • torch.nn.functional.conv2d
    • 作用:实现 2D 卷积操作 的底层函数(与 nn.Conv2d 模块功能相同,但更灵活)。
    • 常用参数
      • input (必需):输入张量,格式为 4D 张量,表示一批图像数据。
      • weight (必需):卷积核权重,格式为 4D 张量
      • bias (默认值: None):偏置项,格式为 1D 张量
      • stride (默认值: 1):控制卷积核滑动的步长(步幅)。
      • padding (默认值: 0):在输入张量的边缘填充 0,控制输出尺寸。
      • dilation (默认值: 1):控制卷积核的空洞率(dilated convolution),扩大感受野。
      • groups (默认值: 1):控制分组卷积的分组数,用于减少参数量或实现特定结构(如深度可分离卷积)。

P17. 神经网络-卷积层

  • torch.nn.conv2d
    • 作用:用于实现 2D 卷积 的标准模块(类),它封装了 torch.nn.functional.conv2d 的功能,并自动管理权重和偏置参数。
    • 常用参数
      • in_channels (必需):输入数据的通道数。
      • out_channels (必需):卷积核的数量(即输出通道数),决定了输出特征图的深度。
      • kernel_size (必需):卷积核的大小(高度和宽度)。
      • stride (默认值: 1):控制卷积核滑动的步长(步幅)。
      • padding (默认值: 0):在输入张量的边缘填充 0,控制输出尺寸。
      • padding_mode (默认值: 'zeros'):指定填充模式(仅当 padding>0 时生效)。
      • dilation (默认值: 1):控制卷积核的空洞率(dilated convolution),扩大感受野。
      • groups (默认值: 1):控制分组卷积的分组数,用于减少参数量或实现特定结构(如深度可分离卷积)。
      • bias (默认值: True):是否在卷积后添加偏置项。

P18. 神经网络-最大池化的使用

  • torch.nn.MaxPool2d
    • 作用:对输入特征图进行下采样(降维),保留局部区域的最大值以提取显著特征并减少计算量。
    • 常用参数
      • kernel_size (必需):池化窗口的大小(高度和宽度)。
      • stride (默认值: None,即等于 kernel_size):控制池化窗口滑动的步长(步幅)。
      • padding (默认值: 0):在输入特征图的边缘填充 0,控制输出尺寸。
      • dilation (默认值: 1):控制池化窗口的空洞率(dilated pooling),扩大感受野。
      • return_indices (默认值: False):是否返回最大值在输入特征图中的索引位置
      • ceil_mode (默认值: False):控制输出尺寸的计算方式。

P19. 神经网络-非线性激活

  • torch.nn.ReLU
    • 作用:将所有负值置为 0,正值保持不变。
    • 常用参数
      • inplace (默认值: False):是否进行原地操作(in-place operation),即直接修改输入张量的值,而非创建新的张量。
  • torch.nn.Sigmoid的常用参数
    • 作用:将输入 x 映射到 (0, 1) 区间,输出值可解释为概率。

P20. 神经网络-线性层及其他层介绍

  • 总结对比表
    • 层类型
      核心功能
      典型应用场景
      Normalization
      数据归一化
      加速训练,稳定梯度
      Recurrent
      序列建模(时序依赖)
      NLP、时间序列预测
      Transformer
      自注意力机制
      机器翻译、视觉Transformer
      Linear
      线性变换
      分类器、特征映射
      Dropout
      正则化(防过拟合)
      所有深度学习模型
      Sparse
      稀疏数据高效处理
      推荐系统、图神经网络
  • 线性层
    • torch.flatten
      • 功能:将输入张量的指定维度范围(从 start_dim 到 end_dim)合并为一个维度,生成一个新的展平后的张量。
      • 常用参数
        • input(必须):输入的任意维度张量(如 1D、2D、3D、4D 等)。
        • start_dim(默认为 0):开始展平的维度索引(从该维度起,后续维度会被合并)。
        • end_dim(默认为 -1):结束展平的维度索引(到该维度止,所有中间维度会被合并)。负数表示从后往前计数(如 -1 表示最后一个维度)。
    • torch.nn.Linear
      • 功能:对输入张量的最后一个维度执行线性变换。
      • 常用参数
        • in_features (必需):输入张量最后一个维度的大小(即输入特征的维度)。
        • out_features (必需):输出张量最后一个维度的大小(即输出特征的维度)。
        • bias (默认值: True):是否为线性变换添加偏置项 b

P21. 神经网络-搭建小实战和Sequential的使用

  • CIFAR10 模型结构
    • CIFAR10模型结构
      CIFAR10模型结构
  • torch.nn.Sequential功能:将多个神经网络模块(如卷积层、全连接层、激活函数等)按定义的顺序组合成一个整体模型,数据会依次通过每个模块,无需手动编写前向传播代码。

P22. 损失函数与反向传播

  • torch.nn.L1Loss
    • 功能:计算预测值与目标值之间 绝对差值的平均值(或总和)
    • 常用参数
      • reduction='mean'(默认):指定如何对每个样本的损失进行汇总,有三个可选值:'none''mean''sum'
  • torch.nn.CrossEntropyLoss
    • 功能:交叉熵损失函数主要用于多分类任务(multi-class classification),比如图像分类、文本分类等场景。
    • 常用参数
      • weight(默认值:None):为每个类别指定一个权重,用于处理类别不平衡问题。形状为 [num_classes]
      • ignore_index(默认值:-100):指定一个目标类别索引,该类别的损失将被忽略(常用于分割任务中的背景类)
      • reduction(默认值:'mean’):指定如何汇总损失:'none''mean'(默认)、'sum'
    • 输入要求
      • 输入(logits):模型的原始输出,形状为 [batch_size, num_classes],是 未经过 softmax 的分数(logits)
      • 目标(target):每个样本的真实类别索引,是一个 整数张量,形状为 [batch_size],其中的值范围是 [0, num_classes - 1]
  • 反向传播result_loss.backward()
    • 调用 result_loss.backward()自动计算所有可学习参数的梯度(即 ∂loss/∂weight, ∂loss/∂bias 等)。

P23. 优化器

  • 什么是优化器(Optimizer)
    • 作用:根据梯度信息,智能地调整模型参数,让损失函数下降得更快、更稳定。
    • 在训练神经网络的过程中:
        1. 我们通过前向传播计算预测值;
        1. 通过损失函数计算预测值与真实值之间的误差;
        1. 通过反向传播计算损失对模型参数的梯度;
        1. 最后,优化器 根据这些梯度来更新模型的参数,使损失逐步减小。
  • torch.optim 中常见的优化器
    • 优化器类名
      简介
      torch.optim.SGD
      随机梯度下降(Stochastic Gradient Descent),最基础的优化器
      torch.optim.Adam
      自适应矩估计优化器,结合了动量和自适应学习率,非常流行
      torch.optim.AdamW
      Adam 的改进版本,解决了权重衰减实现上的问题
      torch.optim.RMSprop
      均方根传播优化器,适合非平稳目标,常用于 RNN
      torch.optim.Adagrad
      自适应学习率优化器,适合稀疏数据
      torch.optim.Adadelta
      Adagrad 的改进版,不需要手动设置初始学习率
      torch.optim.LBFGS
      二阶优化方法,适合小批量问题,但计算开销较大
  • 共同参数
    • 参数名
      类型
      含义
      params
      Iterable
      需要优化的模型参数(通常传入 model.parameters()
      lr (learning rate)
      float
      学习率,控制每次参数更新的步长,是最重要的超参数之一
      weight_decay
      float
      权重衰减(L2 正则化),用于防止过拟合,默认值通常为 0
      momentum
      float (部分优化器支持)
      动量因子,用于加速 SGD 在相关方向上的收敛,减少震荡(如 SGD、RMSprop)
      dampening
      float (部分优化器支持)
      动量的抑制因子,通常与 momentum 配合使用(如 SGD)
      nesterov
      bool (部分优化器支持)
      是否使用 Nesterov 动量(如 SGD),可以让动量“预见未来”,效果更好
      eps
      float (部分优化器支持)
      数值稳定性常数,防止除零错误(如 Adam、RMSprop)
      amsgrad
      bool (Adam 相关优化器支持)
      是否使用 AMSGrad 变体,对学习率进行更严格的约束(Adam/AdamW)
  • 使用流程

    P24. 现有网络模型的使用及修改

    • torchvision.models核心功能
      • 图像分类模型(最常用):如 ResNet、VGG、AlexNet、EfficientNet、MobileNet 等。
      • 目标检测/实例分割模型:如 Faster R-CNN、Mask R-CNN、RetinaNet 等。
      • 语义分割模型:如 FCN、DeepLabV3、U-Net 等。
      • 其他视觉任务模型:如生成对抗网络(GAN)、光流估计等。
    • pretrained 参数详解
      • pretrained=True:加载官方提供的预训练权重(模型参数初始化为已训练好的值),适合直接用于推理或迁移学习。
      • pretrained=False(默认值):模型参数初始化为随机值,需从头开始训练(适合自定义任务且无预训练需求时)。
    • 修改现有网络模型

      P25. 网络模型的保存与读取

      • 保存方式 1(模型结构 + 模型参数)
        • 保存
          • 读取
          • 保存方式 2(模型参数)
            • 保存
              • 读取
            • Python
            • 机器学习
            • PyTorch
            • Tips-如何修改GitHub提交记录中用户名和邮箱PyTorch深度学习入门笔记P7-14
              Loading...