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

深度学习基础概念回顾(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://www.xdnf.cn/news/20178.html

相关文章:

  • 【Java实战㉗】Java日志框架实战:Logback与Log4j2的深度探索
  • 大型Go项目中搭建CI/CD流水线
  • 竞价代运营:百度竞价账户托管优化
  • VeeValidate v4 终极指南:精通 Vue 3 组合式 API 表单验证
  • Web Worker 从原理到实战 —— 把耗时工作搬到后台线程,避免页面卡顿
  • 计算机视觉(九):图像轮廓
  • 破局功能割裂、成本高昂、协同低效,遨游天通卫星电话实现一机多能
  • Adobe Illustrator(Ai) 2022矢量设计软件的安装教程与下载地址
  • 【Python自动化】 21.3 Pandas Series 核心数据结构完全指南
  • 如何使显示器在笔记本盖上盖子时还能正常运转
  • windows找不到gpedit.msc(本地组策略编辑器)
  • Docker容器安全最佳实践:镜像扫描、权限控制与逃逸防范
  • Pie Menu Editor V1.18.7.exe 怎么安装?详细安装教程(附安装包)​
  • [linux仓库]性能加速的隐形引擎:深度解析Linux文件IO中的缓冲区奥秘
  • Java并发锁相关
  • LeetCode - 202. 快乐数
  • 深度学习——数据增强(Data Augmentation)
  • HTML HTML基础(2)
  • 数控机床中,进行前瞻速度规划时,根据几何约束限制计算的拐角过渡速度
  • HTML基础(决定页面结构)
  • MQTT 与 Java 框架集成:Spring Boot 实战(一)
  • 【GEOS-Chem伴随模型第二期】GEOS-Chem Adjoint 安装与配置
  • 2025年互联网行业高含金量证书盘点!
  • leetcode 2749. 得到整数零需要执行的最少操作数 中等
  • 邪修实战系列(1)
  • 使用CI/CD部署项目(前端Nextjs)
  • SQL Server事务隔离级别
  • JavaScript 面向对象 原型和原型链 继承
  • 西嘎嘎学习-day 1
  • 栈:有效的括号