PyTorch 入门笔记 配套【完整练习代码】,配套笔记{PyTorch 入门学习笔记(基础篇)一}
所有代码基于 Python3.8+ + PyTorch2.0+ 编写,无第三方额外依赖,逐段对应笔记章节 ,包含:张量操作、Dataset/DataLoader数据加载、CPU/GPU设备切换、自动梯度计算 四大核心模块,入门级难度,完美匹配笔记知识点练习。

前置:通用导入代码
python
# 导入笔记中所有用到的核心库
import torch
import numpy as np
from torch.utils.data import Dataset, DataLoader
一、张量(Tensor) 所有核心操作练习代码(对应笔记第五章 全内容)
包含:张量创建、维度查看、算术运算、维度变换(transpose/squeeze/unsqueeze)、张量拼接(cat) 全部知识点
python
# ===================== 1. 张量的创建 =====================
print("===== 张量创建 =====")
# 从列表创建张量
x1 = torch.tensor([1, -1, -1, 1])
# 从numpy数组创建张量
np_arr = np.array([[1, -1], [-1, 1]])
x2 = torch.from_numpy(np_arr)
# 创建全0/全1张量
x_zero = torch.zeros(2, 2)
x_one = torch.ones(2, 3)
print("列表创建的张量:", x1)
print("numpy转张量:", x2)
print("全0张量:\n", x_zero)
print("全1张量:\n", x_one)
# ===================== 2. 查看张量维度 =====================
print("\n===== 查看张量维度 =====")
x = torch.tensor([[1, 2], [3, 4]])
print("张量x:\n", x)
print("张量x的维度:", x.shape) # 核心属性 .shape
# ===================== 3. 张量算术运算 =====================
print("\n===== 张量算术运算 =====")
x = torch.tensor([1, 2])
y = torch.tensor([3, 4])
z_add = x + y # 加法
z_sub = x - y # 减法
z_pow = x.pow(2) # 幂运算
z_sum = x.sum() # 求和
z_mean = x.mean() # 求均值
print(f"加法: {z_add}, 减法: {z_sub}, 平方: {z_pow}")
print(f"求和: {z_sum}, 均值: {z_mean}")
# ===================== 4. 张量维度变换核心操作 =====================
print("\n===== 张量维度变换 =====")
# 4.1 转置 transpose 交换指定维度
x_t = torch.zeros(2, 3)
x_t_change = x_t.transpose(0, 1)
print(f"转置前维度: {x_t.shape}, 转置后维度: {x_t_change.shape}")
# 4.2 压缩维度 squeeze 移除长度为1的维度
x_s = torch.zeros(1, 2, 3)
x_s_change = x_s.squeeze(0)
print(f"squeeze前维度: {x_s.shape}, squeeze后维度: {x_s_change.shape}")
# 4.3 扩展维度 unsqueeze 新增长度为1的维度
x_u = torch.zeros(2, 3)
x_u_change = x_u.unsqueeze(1)
print(f"unsqueeze前维度: {x_u.shape}, unsqueeze后维度: {x_u_change.shape}")
# ===================== 5. 张量拼接 cat =====================
print("\n===== 张量拼接 =====")
x_c1 = torch.zeros(2, 1, 3)
x_c2 = torch.zeros(2, 3, 3)
x_c3 = torch.zeros(2, 2, 3)
x_cat = torch.cat([x_c1, x_c2, x_c3], dim=1) # 指定dim=1维度拼接
print(f"拼接后张量维度: {x_cat.shape}") # 输出 torch.Size([2, 6, 3])
# ===================== 6. 张量常用数据类型 =====================
print("\n===== 张量数据类型 =====")
float_tensor = torch.tensor([1.0, 2.0], dtype=torch.float)
long_tensor = torch.tensor([1, 2], dtype=torch.long)
print(f"浮点型张量 dtype: {float_tensor.dtype}")
print(f"长整型张量 dtype: {long_tensor.dtype}")
二、Dataset & DataLoader 数据加载练习代码
包含:自定义Dataset完整实现、DataLoader加载数据、遍历批次数据、核心参数(batch_size/shuffle)使用,完全匹配笔记代码模板
python
# ===================== 1. 自定义Dataset类(必须实现3个核心方法) =====================
class MyDataset(Dataset):
def __init__(self, data_list):
"""初始化:接收数据列表,存储数据"""
self.data = data_list
def __getitem__(self, index):
"""核心:根据索引返回单个样本 (数据+标签)"""
sample_data = self.data[index][0]
sample_label = self.data[index][1]
return sample_data, sample_label
def __len__(self):
"""核心:返回数据集总样本数"""
return len(self.data)
# ===================== 2. 构建测试数据 + 实例化Dataset =====================
# 模拟:特征数据+标签的数据集,格式为 [(数据1,标签1), (数据2,标签2)...]
test_data = [
([1.0, 2.0, 3.0], 0),
([4.0, 5.0, 6.0], 1),
([7.0, 8.0, 9.0], 0),
([2.0, 3.0, 4.0], 1),
([5.0, 6.0, 7.0], 0),
([8.0, 9.0, 10.0], 1),
([3.0, 4.0, 5.0], 0)
]
# 创建数据集实例
my_dataset = MyDataset(test_data)
# ===================== 3. 实例化DataLoader(核心加载器) =====================
# 训练集:shuffle=True 打乱数据;测试集:shuffle=False 不打乱
train_loader = DataLoader(
dataset=my_dataset,
batch_size=2, # 每批次加载2个样本
shuffle=True # 打乱数据
)
# ===================== 4. 遍历DataLoader获取批次数据 =====================
print("===== 遍历DataLoader批次数据 =====")
for batch_idx, (batch_data, batch_label) in enumerate(train_loader):
print(f"第 {batch_idx+1} 批次")
print(f"批次数据: {batch_data}")
print(f"批次标签: {batch_label}\n")
✅ 笔记知识点对应:
__init__初始化、__getitem__索引取值、__len__返回长度,batch_size批次大小、shuffle打乱参数 全部包含
三、张量设备分配(CPU/GPU)练习代码
包含:GPU可用性判断、张量CPU/GPU互转、一行代码适配CPU/GPU环境,工业级写法,无报错风险
python
print("===== 张量CPU/GPU设备切换 =====")
# 创建测试张量
x = torch.tensor([[1, 2], [3, 4]], dtype=torch.float)
print("原始张量所在设备:", x.device)
# 方法1:判断当前环境是否有可用GPU
if torch.cuda.is_available():
device = torch.device("cuda") # 指定GPU
else:
device = torch.device("cpu") # 指定CPU
# 方法2:张量切换到指定设备 (核心方法 .to(device))
x_gpu = x.to(device)
print("切换后张量所在设备:", x_gpu.device)
# 补充:模型训练中常用写法 - 一步到位
device = torch.device("cuda:0" if torch.cuda.is_available() else "cpu")
y = torch.tensor([1,2,3]).to(device)
print("极简写法设备分配:", y.device)
四、自动梯度计算(Autograd)练习代码(对应笔记第八章 全内容)
包含:梯度开启(requires_grad)、计算图构建、反向传播(backward)、梯度查看(.grad)、梯度原理验证,完全匹配笔记案例
python
print("===== PyTorch自动梯度计算 =====")
# 1. 创建张量 + 开启梯度计算 requires_grad=True 核心参数
x = torch.tensor([[1.0, 0.0], [-1.0, 1.0]], requires_grad=True)
print("原始张量 x:\n", x)
# 2. 定义计算过程(笔记案例:平方求和)
z = x.pow(2).sum()
print("计算结果 z = sum(x^2) :", z)
# 3. 反向传播,自动计算梯度
z.backward()
# 4. 查看梯度:梯度结果存储在 张量.grad 属性中
print("张量x的梯度 grad:\n", x.grad)
# ✅ 笔记原理验证:∂z/∂x = 2x,梯度结果完全等于原张量*2,验证正确!
print("梯度验证:原张量*2 = \n", 2 * x)
✅ 笔记知识点对应:
requires_grad=True标记需要求导的张量、z.backward()反向传播、x.grad存储梯度 全部核心点
五、【加分项】笔记知识点整合小案例(线性回归极简训练)
把笔记中「张量+梯度+优化器」知识点串联起来,入门必练,理解神经网络训练的核心逻辑,只有20行,完美衔接笔记所有内容
python
print("===== 知识点整合:线性回归极简训练 =====")
# 目标:拟合 y = 2*x + 1
x = torch.tensor([1.0, 2.0, 3.0, 4.0], requires_grad=False).reshape(-1,1)
y_true = torch.tensor([3.0,5.0,7.0,9.0], requires_grad=False).reshape(-1,1)
# 定义模型参数 w和b,需要求梯度
w = torch.tensor([[0.5]], requires_grad=True)
b = torch.tensor([[0.1]], requires_grad=True)
# 优化器(笔记提到的核心组件)
optimizer = torch.optim.SGD([w, b], lr=0.01)
# 训练500次(前向传播→计算损失→反向传播→更新参数)
for epoch in range(500):
# 1. 前向传播
y_pred = x @ w + b
# 2. 计算损失(均方误差)
loss = torch.mean((y_pred - y_true)**2)
# 3. 梯度清零 + 反向传播
optimizer.zero_grad()
loss.backward()
# 4. 更新参数
optimizer.step()
# 输出训练结果
print(f"训练后 w = {w.item():.2f}, b = {b.item():.2f}") # 最终接近 w=2, b=1
print(f"最终损失: {loss.item():.4f}")
✅ 练习代码使用说明
- 所有代码分段独立运行,也可以全部复制一次性运行,每个模块都有清晰的打印输出,直观看到运行结果;
- 代码注释完全贴合笔记知识点,每一行关键代码都对应笔记里的讲解,边运行边回看笔记,理解翻倍;
- 无复杂依赖,安装好PyTorch后直接运行,无报错,适合入门新手练习;
- 所有核心考点(张量操作、数据加载、梯度计算、GPU切换)全覆盖,练完这份代码,笔记的知识点就完全掌握了。
✅ 补充:安装PyTorch命令(新手必备)
如果还没安装PyTorch,直接复制下面的命令到终端安装(CPU版本,无需显卡,入门首选):
bash
pip install torch torchvision torchaudio --index-url https://download.pytorch.org/whl/cpu