PyTorch 零基础入门完整版学习笔记

一、PyTorch 框架简介

1. 基本介绍

PyTorch 是基于 Python 的开源深度学习框架,核心数据载体是张量(Tensor),主打灵活易用、动态图机制,在学术研究、工业落地、计算机视觉、自然语言处理、强化学习等领域广泛使用。

2. 安装命令

pip install torch -i https://pypi.tuna.tsinghua.edu.cn/simple

3. 核心特点

  • 语法风格和 NumPy 高度相似,上手简单
  • 内置自动微分机制,不用手动求导
  • 采用动态计算图,调试更友好
  • 原生支持 GPU/CUDA 硬件加速
  • 跨平台、生态完善,适配大模型、传统深度学习各类场景

4. 发展历程

  • 2016 年:Facebook 正式发布首个版本
  • 2018 年:PyTorch 1.0 发布,正式进入工业生产级阶段

二、张量 Tensor 核心概念

张量是 PyTorch 的核心数据结构,指同类型多维数组,也是深度学习运算的基础。

维度划分:

  • 0 维:标量(单个数值)
  • 1 维:向量(一维数组)
  • 2 维:矩阵(二维表格)
  • 3 维及以上:高维张量(图像、文本、特征数据)

对比 NumPy:张量不仅能做数值计算,还支持自动求导、GPU 加速


三、张量创建方式

1. 基础创建

  • torch.tensor():根据列表/数组直接创建张量
  • torch.Tensor():可指定形状初始化,也可传入数据
  • IntTensor/FloatTensor/DoubleTensor:直接指定数据类型创建

2. 线性序列张量

  • torch.arange(start, end, step):按步长生成,左闭右开
  • torch.linspace(start, num):均分指定个数元素

3. 随机张量

  • torch.randn():生成正态分布随机张量
  • torch.randint():生成随机整数张量
  • torch.manual_seed():设置随机种子,固定随机结果

4. 特殊常量张量

  • zeros / zeros_like:创建全 0 张量
  • ones / ones_like:创建全 1 张量
  • full / full_like:创建指定填充值的张量

四、张量类型转换

  1. 指定类型转换:tensor.type(torch.xxxTensor)
  2. 快捷方法:
    tensor.half() / float() / double() / int() / long() / short()

五、张量与 NumPy 互相转换

1. 张量 → NumPy

  • tensor.numpy()共享内存,一改全改
  • tensor.numpy().copy():拷贝数据,互不影响

2. NumPy → 张量

  • torch.from_numpy():共享内存
  • torch.tensor(ndarray):新建张量,不共享内存

3. 标量张量取值

单元素张量使用 .item() 取出普通数值。


六、张量数值运算

1. 基础算术运算

常规:add() sub() mul() div() neg() 不修改原张量
带下划线:add_() sub_() mul_()… 原地修改原数据

2. 点乘(哈达玛积)

同形状元素一一相乘:torch.mul() 或 直接使用 *

3. 矩阵乘法

  • 运算符:@
  • 函数:torch.matmul()
    规则:前一个矩阵列数 = 后一个矩阵行数

4. 常用数学函数

sum() mean() pow() sqrt() exp() log() log2() log10()
可通过 dim 指定按行/按列计算。


七、张量索引操作

支持多种索引方式,用法和 Python 切片高度一致:

  • 基础行列索引
  • 列表定点索引
  • 范围切片索引
  • 布尔条件索引
  • 多维高维索引

八、张量形状操作

函数 功能说明
reshape / view 不改变数据,只修改维度形状
squeeze 压缩维度为 1 的轴(降维)
unsqueeze 新增维度为 1 的轴(升维)
transpose 交换指定两个维度
permute 一次性重排所有维度
contiguous 转为内存连续,适配 view 操作

小知识点:经过 transpose/permute 的张量内存不连续,需要 contiguous() 后才能用 view。


九、张量拼接

1. torch.cat

已有维度上拼接,不增加新维度,除拼接轴外形状需一致。

2. torch.stack

全新维度上堆叠,会增加维度,要求两个张量形状完全相同。


十、PyTorch 自动微分 Autograd

1. 核心用法

给张量设置 requires_grad=True,开启梯度追踪,自动完成求导。

2 核心规则

  • PyTorch 只支持标量求导,向量需先用 .sum()
  • loss.backward() 反向传播计算梯度
  • 梯度存在 .grad 属性,会自动累加,必须手动 zero_() 清零

3. 梯度下降标准流程

前向传播计算损失 → 梯度清零 → 反向传播 → 更新参数

4. detach() 用法

切断计算图,生成无梯度的新张量,可安全转为 NumPy。


十一、PyTorch 线性回归实战

1. 模型训练四大标准步骤

  1. 准备数据集
  2. 搭建网络模型
  3. 配置损失函数 + 优化器
  4. 循环训练 + 结果可视化

2. 常用核心 API

  • 网络层:nn.Linear
  • 损失函数:nn.MSELoss
  • 优化器:optim.SGD
  • 数据加载:TensorDataset + DataLoader

3. 训练流程

构造数据集 → 划分批次加载 → 前向预测 → 计算损失 → 梯度清零 → 反向传播 → 参数更新 → 绘制损失曲线与拟合直线。


十二、学习总结

  1. PyTorch 以张量 Tensor 为核心,兼顾 NumPy 易用性与深度学习专属能力;
  2. 熟练掌握张量创建、类型转换、运算、索引、变形、拼接是入门基础;
  3. 自动微分是 PyTorch 精髓,不用手动推导公式,自动反向求导;
  4. 线性回归案例完整覆盖「数据→模型→损失→优化→训练」工业标准流程,是后续深度学习项目的通用模板。
posted @ 2026-05-20 14:54  Petula  阅读(95)  评论(0)    收藏  举报