一、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:创建指定填充值的张量
四、张量类型转换
- 指定类型转换:
tensor.type(torch.xxxTensor) - 快捷方法:
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. 模型训练四大标准步骤
- 准备数据集
- 搭建网络模型
- 配置损失函数 + 优化器
- 循环训练 + 结果可视化
2. 常用核心 API
- 网络层:
nn.Linear - 损失函数:
nn.MSELoss - 优化器:
optim.SGD - 数据加载:
TensorDataset + DataLoader
3. 训练流程
构造数据集 → 划分批次加载 → 前向预测 → 计算损失 → 梯度清零 → 反向传播 → 参数更新 → 绘制损失曲线与拟合直线。
十二、学习总结
- PyTorch 以张量 Tensor 为核心,兼顾 NumPy 易用性与深度学习专属能力;
- 熟练掌握张量创建、类型转换、运算、索引、变形、拼接是入门基础;
- 自动微分是 PyTorch 精髓,不用手动推导公式,自动反向求导;
- 线性回归案例完整覆盖「数据→模型→损失→优化→训练」工业标准流程,是后续深度学习项目的通用模板。
