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

深度学习基础概念回顾(Pytorch架构)

本篇将详细介绍 PyTorch 深度学习框架,包括pytorch的基础库和函数,以及深度学习中的一些基础概念,如张量、优化器、激活函数、超参数等。


Pytorch

1. PyTorch 简介

PyTorch 是一个开源的深度学习框架,由 Facebook 的人工智能研究院(FAIR)开发和维护。它支持动态计算图(Dynamic Computational Graph),广泛应用于计算机视觉、自然语言处理、强化学习等领域。

2. PyTorch 的主要特点

  1. 动态图机制(Dynamic Computation Graph)

    • 每次运行模型时都会动态创建计算图。便于调试,与静态图(如 TensorFlow 1.x)相比,代码更直观。
  2. 强大的 GPU 支持

    • 通过 CUDA 支持 NVIDIA GPU 加速。(tensor.to(device)
  3. 张量(Tensor)操作

    • 类似于 NumPy 的多维数组操作。
    • 自动求导(autograd),方便计算梯度和反向传播。
  4. 模块化,内置函数多

    • 模型可以通过继承 nn.Module 自定义。
    • 内置常用层(卷积、线性、RNN 等)和损失函数。
  5. 工具包多

    • TorchVision:计算机视觉工具包。
    • TorchText:自然语言处理工具包。
    • TorchAudio:音频处理工具包。
    • PyTorch Lightning、FastAI 等高层封装,简化训练流程。

3. PyTorch 的核心组成

  1. Tensor(张量)

    • PyTorch 的基本数据结构(计算单位),类似于多维数组
    • 支持 GPU 计算、自动求导。
    import torch
    x = torch.randn(3, 4)  # 创建一个 3x4 的随机张量
    y = x + 2               # 张量运算
    
  2. Autograd(自动求导)

    • 自动计算梯度,用于反向传播。
    x = torch.tensor([2.0], requires_grad=True)
    y = x ** 2
    y.backward()  # 自动计算梯度
    print(x.grad) # 4.0
    

    requires_grad=True:告诉 PyTorch 要追踪这个张量的计算历史,因为我们后面要对它求导(梯度)。有了这个属性,PyTorch 就会记录所有涉及 x 的操作,为反向传播做准备

  3. nn 模块(神经网络模块)

    • 提供层、损失函数和常用工具。
    import torch.nn as nn
    class SimpleNet(nn.Module):def __init__(self):super(SimpleNet, self).__init__()self.fc = nn.Linear(10, 1)def forward(self, x):return self.fc(x)
    
  4. Optimizer(优化器)

    • 更新模型参数,如 SGD、Adam 等。
    import torch.optim as optim
    model = SimpleNet()
    optimizer = optim.SGD(model.parameters(), lr=0.01)
    
  5. DataLoader(数据加载)

    • 批量读取数据,支持打乱和多线程加载。
    from torch.utils.data import DataLoader, TensorDataset
    dataset = TensorDataset(torch.randn(100, 10), torch.randn(100, 1))
    loader = DataLoader(dataset, batch_size=32, shuffle=True)
    

4. PyTorch 的训练流程

  1. 定义模型:继承 nn.Module 或使用现成模型。

  2. 准备数据:使用 DataLoader 加载训练和测试数据。数据清洗、数据划分…

  3. 定义损失函数:如 nn.MSELoss()nn.CrossEntropyLoss()

  4. 定义优化器:如 optim.Adam()

  5. 训练循环

    • 前向传播计算输出。
    • 计算损失。
    • 反向传播 (loss.backward())。
    • 更新参数 (optimizer.step())。
    • 清空梯度 (optimizer.zero_grad())。

Pytorch 基础库和函数

1. 张量(Tensor)相关

PyTorch 的核心是张量,它类似于 NumPy 的多维数组,但支持 GPU 加速和自动求导。

常用库:

import torch

常用函数:

功能函数说明
创建张量torch.tensor(data)从列表/数组创建张量
随机初始化torch.randn(shape)标准正态分布随机张量
全零/全一torch.zeros(shape), torch.ones(shape)初始化张量
形状操作x.view(), x.reshape(), x.squeeze(), x.unsqueeze()改变张量形状
计算操作torch.sum(), torch.mean(), torch.max(), torch.min(), torch.argmax()常用数学操作
GPU操作x.to('cuda'), x.cuda(), x.cpu()张量在 CPU/GPU 间转换
自动求导x.requires_grad_(), x.grad开启梯度计算、获取梯度

2. 自动求导(Autograd)

用于反向传播计算梯度。

3. 神经网络模块(nn)

构建和训练深度学习模型。

import torch.nn as nn

常用类和函数:

功能类/函数说明
模型基类nn.Module所有模型需继承
全连接层nn.Linear(in_features, out_features)常用线性层
卷积层nn.Conv2d(in_channels, out_channels, kernel_size)2D卷积
激活函数nn.ReLU(), nn.Sigmoid(), nn.Softmax(dim)非线性激活
损失函数nn.MSELoss(), nn.CrossEntropyLoss(), nn.BCELoss()训练目标函数
Dropout/BatchNormnn.Dropout(p), nn.BatchNorm2d(num_features)正则化和归一化

4. 优化器(Optimizer)

import torch.optim as optim

常用类:

优化器说明
optim.SGD(model.parameters(), lr=0.01)随机梯度下降
optim.Adam(model.parameters(), lr=0.001)自适应学习率优化
optim.RMSprop(model.parameters(), lr=0.001)RMSProp 优化

常用方法:

optimizer.zero_grad()   # 清空梯度
loss.backward()         # 反向传播
optimizer.step()        # 更新参数

5. 数据加载(DataLoader)

from torch.utils.data import Dataset, DataLoader, TensorDataset

6. 其他常用工具

  • 设备管理
device = torch.device('cuda' if torch.cuda.is_available() else 'cpu')
x = x.to(device)
model.to(device)
  • 保存与加载模型
torch.save(model.state_dict(), 'model.pth')  # 保存模型参数
model.load_state_dict(torch.load('model.pth'))  # 加载模型参数
  • 梯度裁剪(防止梯度爆炸)
torch.nn.utils.clip_grad_norm_(model.parameters(), max_norm=1.0)

总结来说,PyTorch 最常用的库主要包括:

  1. torch → 张量操作 & 自动求导
  2. torch.nn → 神经网络层 & 损失函数
  3. torch.optim → 优化器
  4. torch.utils.data → 数据加载
  5. torch.cuda / device → GPU 加速

深度学习基础概念

超参数

是人为设定的,不是网络自己学习的参数。

学习率(Learning Rate, lr)

定义:控制每次参数更新的步长大小。

  • 作用

    • 学习率过大 → 训练不稳定,可能发散
    • 学习率过小 → 收敛慢,可能陷入局部最优

示例

import torch
optimizer = torch.optim.Adam(model.parameters(), lr=0.001)

Pytorch 中在设置优化器的时候设置 learning rate

  • 这里 lr=0.001 表示每次梯度更新权重时,步长为 0.001。

通常会用学习率衰减(lr decay),训练后期降低学习率以精细调整参数。

批大小(Batch Size)

定义:一次送入网络训练的样本数量。

  • 作用

    • 小 batch → 梯度估计噪声大,但更容易跳出局部最优
    • 大 batch → 梯度更稳定,速度快,但占用显存大
Epoch

定义:完整遍历训练集一次算 1 个 epoch。

  • 作用:控制训练轮次,通常配合早停(Early Stopping)防止过拟合。
优化器(Optimizer)

定义:控制参数如何根据梯度更新。

  • 常见优化器

    • SGD:随机梯度下降
    • Momentum:加速收敛
    • Adam / AdamW:自适应学习率
    • RMSProp:适合非平稳目标
optimizer = torch.optim.SGD(model.parameters(), lr=0.01, momentum=0.9)

常见优化器示例:

优化器特点PyTorch 示例
SGD基础随机梯度下降torch.optim.SGD(model.parameters(), lr=0.01)
SGD + Momentum梯度累积,减少震荡torch.optim.SGD(model.parameters(), lr=0.01, momentum=0.9)
RMSProp自适应学习率,适合非平稳目标torch.optim.RMSprop(model.parameters(), lr=0.001)
Adam自适应学习率 + momentumtorch.optim.Adam(model.parameters(), lr=0.001)
AdamWAdam + 权重衰减(更好的正则化)torch.optim.AdamW(model.parameters(), lr=0.001, weight_decay=0.01)

一般 Adam 或 AdamW 作为默认优化器,收敛快,参数调节少。

激活函数(Activation Function)

定义:为神经元引入非线性能力,让网络能拟合复杂函数。

  • 常用激活函数

    • ReLUf(x)=max(0,x) → 高效,常用
    • Sigmoid:0~1 → 二分类输出
    • Tanh:-1~1 → 对称激活
    • GELU / LeakyReLU → 改进 ReLU

示例

import torch.nn as nn
act = nn.ReLU()

网络层数 / 神经元数(Model Capacity)

定义:网络的深度和宽度。

  • 作用

    • 层数越多、神经元越多 → 模型更强大,可拟合复杂数据
    • 但参数多 → 容易过拟合,需要更多数据

示例

nn.Linear(128, 64)  # 输入 128 个特征,输出 64 个神经元

正则化(Regularization)

定义:防止模型过拟合,控制复杂度。

  • 常用方法

    • L1 / L2 正则化:权重约束
    • Dropout:随机屏蔽部分神经元

示例

nn.Dropout(p=0.5)  # 50% 概率丢弃神经元

文章转载自:

http://8u7VFaV1.xhjjs.cn
http://y8CBRaRx.xhjjs.cn
http://1Oq2eS5L.xhjjs.cn
http://AaeZfDER.xhjjs.cn
http://yChlCBWF.xhjjs.cn
http://1U3a1XJo.xhjjs.cn
http://fapB50YP.xhjjs.cn
http://dcwnzGLp.xhjjs.cn
http://ylSm3g11.xhjjs.cn
http://qLsOmLxC.xhjjs.cn
http://hUvQdcig.xhjjs.cn
http://nsSSfexd.xhjjs.cn
http://27NhAa1z.xhjjs.cn
http://PvIfgs0k.xhjjs.cn
http://SViFTFl2.xhjjs.cn
http://esDigcZJ.xhjjs.cn
http://S1SBpEHK.xhjjs.cn
http://5tWmbka0.xhjjs.cn
http://hLrWT8fa.xhjjs.cn
http://PFIxn1wr.xhjjs.cn
http://4o6GIAm7.xhjjs.cn
http://isa8YiSq.xhjjs.cn
http://xvWO7tHP.xhjjs.cn
http://dDrXAGPV.xhjjs.cn
http://k3vawuDz.xhjjs.cn
http://enYzh8Jq.xhjjs.cn
http://HjH5cEft.xhjjs.cn
http://XgnbVObm.xhjjs.cn
http://AvFZd6ta.xhjjs.cn
http://oGTfUsX2.xhjjs.cn
http://www.dtcms.com/a/370473.html

相关文章:

  • 基于LSTM深度学习的网络流量测量算法matlab仿真
  • 【PyTorch实战:Tensor变形】5、 PyTorch Tensor指南:从基础操作到Autograd与GPU加速实战
  • 【基础-判断】@Entry装饰的自定义组件将作为页面的入口。在单个页面中可以使用多个@Entry装饰不同自定义组件。
  • 驱动开发系列71 - GLSL编译器实现 - 指令选择
  • 贪心算法应用:化工反应器调度问题详解
  • OpenAvatarChat项目在Windows本地运行指南
  • canal+DataX实现数据全量/实时同步
  • Jenkins运维之路(自动获得分支tag自动构建)
  • 服务器内存和普通计算机内存在技术方面有什么区别?
  • 同一台nginx中配置多个前端项目的三种方式
  • 【LeetCode热题100道笔记】排序链表
  • Shell 脚本实现系统监控与告警
  • 【算法--链表】86.分割链表--通俗讲解
  • 基于区块链的IoMT跨医院认证系统:Python实践分析
  • 用内存顺序实现 三种内存顺序模型
  • rh134第五章复习总结
  • Java包装类型
  • Linux awk 命令使用说明
  • 一个正常的 CSDN 博客账号,需要做哪些基础准备?
  • 文件I/O与I/O多路复用
  • protobuf的序列反序列化
  • Linux/UNIX系统编程手册笔记:共享库、进程间通信、管道和FIFO、内存映射以及虚拟内存操作
  • 吴恩达机器学习(九)
  • 基于多级特征编码器用于声学信号故障检测模型
  • 【LeetCode热题100道笔记】二叉树中的最大路径和
  • The Open Group 宣布成立Industrial Advanced Nuclear™ 联盟)
  • 问题:指令译码前控制信号还没有产生,那么如何控制译码前指令的动作呢?
  • 软件测试理论
  • Wisdom SSH 是一款创新性工具,通过集成 AI 助手,为服务器性能优化带来极大便利。
  • ChatGPT下的相关聊天提示词