PyTorch 入门笔记配套【完整练习代码】

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}")

✅ 练习代码使用说明

  1. 所有代码分段独立运行,也可以全部复制一次性运行,每个模块都有清晰的打印输出,直观看到运行结果;
  2. 代码注释完全贴合笔记知识点,每一行关键代码都对应笔记里的讲解,边运行边回看笔记,理解翻倍;
  3. 无复杂依赖,安装好PyTorch后直接运行,无报错,适合入门新手练习;
  4. 所有核心考点(张量操作、数据加载、梯度计算、GPU切换)全覆盖,练完这份代码,笔记的知识点就完全掌握了。

✅ 补充:安装PyTorch命令(新手必备)

如果还没安装PyTorch,直接复制下面的命令到终端安装(CPU版本,无需显卡,入门首选):

bash 复制代码
pip install torch torchvision torchaudio --index-url https://download.pytorch.org/whl/cpu
相关推荐
沛沛老爹17 小时前
Web开发者进阶AI:Agent技能设计模式之迭代分析与上下文聚合实战
前端·人工智能·设计模式
用户51914958484517 小时前
揭秘CVE-2025-47227:ScriptCase高危漏洞自动化利用与分析工具
人工智能·aigc
光锥智能17 小时前
CES观察|AI硬件迎来黄金时代,中国机器人“进场打工”
人工智能
九河云17 小时前
数据驱动未来,华为云DWS为智能决策提速
大数据·人工智能·安全·机器学习·华为云
米汤爱学习17 小时前
stable-diffusion-webui【笔记】
笔记·stable diffusion
黄河里的小鲤鱼18 小时前
拯救草台班子-战略
人工智能·python·信息可视化
qq_4112624218 小时前
DAB加ai加蓝牙音箱有市场吗
人工智能
华清远见成都中心18 小时前
机器学习怎么学?
人工智能·机器学习