当前位置: 首页 > news >正文

第三十三天打卡复习

torch 库

 1. 张量操作
torch 库提供了张量(Tensor)数据结构,类似于 NumPy 的多维数组,但张量可以在 GPU 上运行以加速计算。

 2. 自动求导
torch.autograd 模块实现了自动求导功能,这对于训练神经网络至关重要。通过设置 requires_grad=True ,PyTorch 会跟踪所有涉及该张量的操作,并在调用 backward() 方法时自动计算梯度。

 3. 神经网络模块
torch.nn 模块提供了构建神经网络所需的各种组件,如层、损失函数等。可以通过继承 torch.nn.Module 类来定义自定义的神经网络。

4. 优化器
torch.optim 模块提供了各种优化算法,如随机梯度下降(SGD)、Adam 等,用于更新神经网络的参数。

 5. GPU 加速
torch.cuda 模块允许将张量和模型移动到 GPU 上进行计算,从而加速训练过程。可以使用 torch.cuda.is_available() 检查 GPU 是否可用。

全连接神经网络(Fully Connected Neural Network)

也被称为多层感知机(Multilayer Perceptron, MLP),是一种基本的神经网络结构。

1. 输入层(Input Layer)

输入层是神经网络的第一层,负责接收原始数据。输入层的神经元数量通常取决于输入数据的特征数量。例如,若输入数据是一个包含 784 个像素值的手写数字图像(28x28 像素),那么输入层就会有 784 个神经元,每个神经元对应一个像素值。输入层并不对数据进行任何计算,只是简单地将数据传递给下一层。

 2. 隐藏层(Hidden Layer)


隐藏层位于输入层和输出层之间,可以有一层或多层。隐藏层的神经元通过权重和偏置对输入数据进行非线性变换,从而学习数据中的复杂模式和特征。每一层的神经元都与上一层的所有神经元相连接,这就是“全连接”的含义。隐藏层的神经元数量和层数是超参数,需要根据具体问题进行调整。更多的隐藏层和神经元通常能学习到更复杂的模式,但也可能导致过拟合。

 3. 输出层(Output Layer)


输出层是神经网络的最后一层,负责输出最终的预测结果。输出层的神经元数量取决于具体的任务。例如,在二分类问题中,输出层通常只有一个神经元,输出一个介于 0 和 1 之间的概率值;在多分类问题中,输出层的神经元数量等于类别数,每个神经元输出对应类别的概率。

 4. 前向传播顺序

前向传播(Forward Propagation)是神经网络的核心计算过程,指输入数据从输入层逐层传递到输出层的过程。以下是详细步骤和计算顺序(以全连接网络为例):


1. 输入层 → 第一个隐藏层
  • 输入数据X(形状:[batch_size, input_dim]

  • 权重矩阵(形状:[input_dim, hidden_units]

  • 偏置向量(形状:[hidden_units]

  • 计算过程

    Z¹ = X · W¹ + b¹  # 线性变换
    A¹ = σ(Z¹)        # 激活函数(如ReLU/Sigmoid)
    • :加权和(未激活值)

    • :激活后的输出(作为下一层输入)


2. 隐藏层 → 隐藏层(多层时)
  • 第 k 层计算(k ≥ 2):

    Zᵏ = Aᵏ⁻¹ · Wᵏ + bᵏ  # 前一层输出作为输入
    Aᵏ = σ(Zᵏ)
  • 关键点

    • 每层的输入是前一层的激活输出 Aᵏ⁻¹

    • 权重矩阵 Wᵏ 形状为 [prev_units, current_units]


3. 最后一个隐藏层 → 输出层
  • 输入Aᴸ⁻¹(最后隐藏层输出)

  • 输出层权重Wᴸ(形状:[last_hidden_units, output_dim]

  • 计算

    Zᴸ = Aᴸ⁻¹ · Wᴸ + bᴸ
    Ŷ = g(Zᴸ)  # 输出层激活函数
    • 分类任务g 通常用 Softmax(多分类)或 Sigmoid(二分类)

    • 回归任务g 可以是恒等函数(无激活)

5.神经网络

在训练过程中监控模型在测试集(或验证集)上的性能。这样做有两个关键目的:

  1. 检测过拟合:当训练损失下降但测试损失上升时,表明模型开始记忆训练数据而非学习泛化模式

  2. 确定最佳停止点:通过测试集表现选择最佳模型,避免欠拟合或过拟合

6.参数

1.num_epochs

num_epochs = 20000  # 训练的轮数
  • 作用:定义模型将完整遍历整个训练数据集的次数

  • 典型值

    • 简单任务:100-500

    • 中等任务:500-2000

    • 复杂任务:2000-10000(本例20000偏大,可能是复杂任务或调试目的)

  • 注意事项

    • 过小:模型欠拟合

    • 过大:可能导致过拟合且浪费计算资源

    • 通常配合早停机制使用

2. model.forward(X_train) 与 model(X_train)

outputs = model.forward(X_train)   # 显式调用
# outputs = model(X_train)         # 隐式调用
  • 作用:执行前向传播计算

  • 关键区别

    • forward():直接调用前向传播方法

    • model():通过PyTorch的__call__魔术方法隐式调用forward()推荐使用

  • 参数

    • X_train:训练数据张量,形状通常为[batch_size, features]

3. criterion  损失函数

loss = criterion(outputs, y_train)
  • 作用:计算模型预测值与真实标签之间的差异(损失函数)

  • 常见选择

    • 分类任务:nn.CrossEntropyLoss()(多分类),nn.BCELoss()(二分类)

    • 回归任务:nn.MSELoss()(均方误差)

    • 自定义损失:可继承nn.Module实现

  • 参数

    • outputs:模型预测值

    • y_train:真实标签

4. optimizer

optimizer.zero_grad()  # 梯度清零
loss.backward()        # 反向传播
optimizer.step()       # 参数更新
  • 优化器三件套

    • zero_grad():清零梯度缓存(防止梯度累积)

    • backward():自动计算梯度(反向传播)

    • step():根据梯度更新权重参数

  • 常见优化器类型

    # 创建示例
    optimizer = torch.optim.SGD(model.parameters(), lr=0.01)
    optimizer = torch.optim.Adam(model.parameters(), lr=0.001)

    关键参数

  • 优化器学习率(lr)动量(momentum)适用场景
    SGD0.01-0.10.9-0.99基础优化
    Adam0.0001-0.001β1=0.9, β2=0.999默认首选
    RMSprop0.001-RNN/LSTM

5. loss.item()

losses.append(loss.item())
  • 作用:loss 一般是一个包含单个元素的张量(Tensor), item() 是张量对象的一个方法,其作用是将仅含一个元素的张量转换为 Python 的标量(如 float 类型)。因此, loss.item() 就是把存储损失值的张量转换为 Python 标量值,方便后续打印、记录或者进一步处理。

  • 必要性

    • PyTorch张量包含梯度信息,.item()剥离计算图

    • 减少内存占用(避免保存完整计算图)

    • 便于Python数值操作(绘图、打印等)

6. 日志打印控制

if (epoch + 1) % 100 == 0:print(f'Epoch [{epoch+1}/{num_epochs}], Loss: {loss.item():.4f}')
  • 关键参数

    • 100:日志打印间隔(平衡信息量与输出量)

    • :.4f:格式化损失值显示4位小数

  • 设计考量

    • 大模型/大数据集:增大间隔(如500-1000)

    • 调试阶段:减小间隔(如10-50)

7. 隐藏的重要参数

学习率 (Learning Rate)
  • 作用:控制参数更新步长的超参数

  • 影响

    • 过大:震荡/发散

    • 过小:收敛缓慢

  • 设置方法

    optimizer = torch.optim.Adam(model.parameters(), lr=0.001)  # 关键参数
批量大小 (Batch Size)
  • 作用:每次迭代使用的样本数

  • 影响

    • 大batch:训练稳定,内存要求高

    • 小batch:噪声大,正则化效果强

  • 典型位置

    # 在DataLoader中设置
    train_loader = DataLoader(dataset, batch_size=64)

    @浙大疏锦行

http://www.xdnf.cn/news/787915.html

相关文章:

  • 机器学习——放回抽样
  • 008房屋租赁系统技术揭秘:构建智能租赁服务生态
  • Matlab自学笔记五十七:符号运算、可变精度运算、双精度浮点型运算,三种运算精度的概念、比较、选择和应用
  • 【25-cv-05991】Keith律所代理Ana Maria油画版权
  • kubeSphere安装使用
  • 流、线程、任务、队列等相关在不同语言的区别联系
  • 项目计划缺乏风险评估和应对策略,如何完善
  • Qiskit:量子计算模拟器
  • Prj09--8088单板机C语言8253产生1KHz方波(1)
  • HTTP Error 400 Bad request 问题分析解决
  • spring boot应答500问题跟踪
  • YAML 文件中不同格式的含义详解
  • Flink 重启后事件被重复消费的原因与解决方案
  • Deep Search之R1-Searcher系列
  • QT实现动画翻转效果
  • Docker 镜像深度剖析:构建、管理与优化
  • 多模态知识图谱可视化构建(neo4j+python+flask+vue环境搭建与示例)
  • 秋招准备-数据结构
  • 前端面试题之Class详解
  • @Resource和@Autowire
  • 《前端面试题:CSS预处理器(Sass、Less等)》
  • 代码训练LeetCode(19)轮转数组
  • 【学习记录】深入解析 AI 交互中的五大核心概念:Prompt、Agent、MCP、Function Calling 与 Tools
  • 全球常用地理信息、遥感数据处理软件介绍(单机版、在线云平台)
  • LeetCode 高频 SQL 50 题(基础版) 之 【高级查询和连接】· 下
  • 【Typst】5.文档结构元素与函数
  • 突破视觉认知边界VisionReasoner:用强化学习统一视觉感知与推理的全能框架
  • 防火墙在OSI模型中的层级工作(2025)
  • 动态规划十大经典题型状态转移、模版等整理(包括leetcode、洛谷题号)
  • Dify-5:Web 前端架构