PyTorch 2.6快速入门:手把手教你用Jupyter跑通第一个AI模型
PyTorch 2.6快速入门手把手教你用Jupyter跑通第一个AI模型想学AI但被复杂的安装配置劝退看着别人用PyTorch训练模型自己却连环境都搭不起来别担心今天这篇教程就是为你准备的。我们将用最简单直接的方式在10分钟内带你从零开始在Jupyter里跑通你的第一个AI模型。你不需要懂Linux命令不需要折腾CUDA驱动甚至不需要在本地安装任何东西。我们将利用一个预置好的PyTorch 2.6镜像直接在浏览器里打开Jupyter写几行代码就能看到模型训练起来。整个过程就像打开一个网页应用一样简单。读完这篇教程你将学会如何一键启动一个包含PyTorch 2.6和GPU支持的完整开发环境如何在Jupyter里编写、运行你的第一个PyTorch程序理解一个简单神经网络从数据准备到训练完成的全过程获得可以直接复用的代码模板用于你自己的项目准备好了吗让我们开始吧。1. 环境准备一分钟搞定PyTorch开发环境传统上搭建一个PyTorch开发环境需要好几个步骤安装Python、安装PyTorch、配置CUDA、安装Jupyter……每一步都可能遇到版本冲突、依赖缺失等问题。今天我们要用的方法能让你跳过所有这些麻烦。1.1 为什么选择预置镜像想象一下你拿到的是一个已经装好所有软件、配置好所有环境的电脑开机就能用。PyTorch 2.6镜像就是这样一个开箱即用的环境。它里面已经包含了PyTorch 2.6最新的稳定版本支持所有新特性CUDA工具包让PyTorch能够使用GPU加速计算Jupyter Notebook直接在浏览器里写代码、看结果常用数据科学库NumPy、Pandas、Matplotlib等Python环境所有依赖都已经配置好这意味着你不需要自己安装任何东西也不需要担心版本兼容性问题。1.2 快速启动环境启动环境的过程简单到难以置信。你只需要找到PyTorch 2.6镜像通常在你使用的云平台或容器服务中点击启动或部署按钮等待几十秒环境就准备好了启动成功后你会看到一个类似这样的界面点击那个链接或者在提供的访问方式中选择Jupyter你的浏览器就会打开一个全新的Jupyter界面。第一次打开时你可能会看到这样的登录页面通常镜像会提供一个默认的token或密码按照提示输入即可进入。2. 第一个PyTorch程序从理解到实践现在环境已经准备好了让我们开始写代码。我会带你一步步完成一个完整的AI模型训练流程从最简单的开始。2.1 创建你的第一个Notebook在Jupyter的主界面点击右上角的New按钮选择Python 3创建一个新的Notebook。你会看到一个空白的代码单元格这就是我们写代码的地方。Notebook的好处是你可以一段一段地运行代码随时看到结果非常适合学习和实验。2.2 验证环境是否正常工作在开始写模型之前我们先确认一下环境配置是否正确。在第一个单元格中输入以下代码import torch import torch.nn as nn import torch.optim as optim import numpy as np import matplotlib.pyplot as plt print(fPyTorch版本: {torch.__version__}) print(fCUDA是否可用: {torch.cuda.is_available()}) print(fGPU设备: {torch.cuda.get_device_name(0) if torch.cuda.is_available() else 无GPU})运行这个单元格按ShiftEnter你会看到类似这样的输出PyTorch版本: 2.6.0 CUDA是否可用: True GPU设备: NVIDIA RTX 4090如果看到CUDA是否可用: True恭喜你你的环境已经配置好GPU支持可以享受GPU加速了。如果显示False也没关系CPU也能运行所有代码只是速度会慢一些。2.3 准备训练数据任何AI模型都需要数据来学习。为了让第一个例子尽可能简单我们使用一个经典的数据集手写数字识别MNIST。不过我们不用下载真实的数据集而是自己生成一些模拟数据。在下一个单元格中输入# 生成模拟数据 # 假设我们要识别手写数字每个数字用10个特征表示 num_samples 1000 # 1000个样本 num_features 10 # 每个样本10个特征 num_classes 3 # 3个类别简化版真实MNIST有10个类别 # 随机生成特征数据 X torch.randn(num_samples, num_features) # 1000x10的矩阵 # 随机生成标签0, 1, 2三个类别 y torch.randint(0, num_classes, (num_samples,)) print(f数据形状: {X.shape}) print(f标签形状: {y.shape}) print(f前5个样本的标签: {y[:5]})运行后你会看到数据形状: torch.Size([1000, 10]) 标签形状: torch.Size([1000]) 前5个样本的标签: tensor([2, 0, 1, 2, 1])这段代码创建了1000个样本每个样本有10个特征标签是0、1、2三个类别中的一个。虽然这是模拟数据但它的结构和真实数据是一样的。3. 构建你的第一个神经网络有了数据现在我们来构建一个简单的神经网络。别担心代码比你想的要简单。3.1 理解神经网络的基本结构一个最简单的神经网络就像一条生产线输入层接收原始数据我们的10个特征隐藏层对数据进行加工处理输出层给出最终结果属于哪个类别在PyTorch中我们可以用几行代码就定义出这样的网络class SimpleNN(nn.Module): def __init__(self, input_size, hidden_size, num_classes): super(SimpleNN, self).__init__() # 第一层从输入特征到隐藏层 self.layer1 nn.Linear(input_size, hidden_size) # 激活函数让网络能够学习复杂模式 self.relu nn.ReLU() # 第二层从隐藏层到输出层 self.layer2 nn.Linear(hidden_size, num_classes) def forward(self, x): # 前向传播数据如何通过网络 out self.layer1(x) out self.relu(out) out self.layer2(out) return out # 创建网络实例 input_size 10 # 输入特征数量 hidden_size 5 # 隐藏层神经元数量 num_classes 3 # 输出类别数量 model SimpleNN(input_size, hidden_size, num_classes) print(model)运行后你会看到网络的结构SimpleNN( (layer1): Linear(in_features10, out_features5, biasTrue) (relu): ReLU() (layer2): Linear(in_features5, out_features3, biasTrue) )这个网络有10个输入对应我们的10个特征5个隐藏神经元3个输出对应3个类别3.2 理解网络是如何工作的你可能想知道这个网络具体在做什么。让我用大白话解释一下想象你是一个老师要判断一个学生是不是好学生。你有10个指标成绩、出勤、作业等。layer1就像你的第一印象根据这10个指标给出5个初步判断。ReLU激活函数就像你的直觉把负面的判断归零只保留正面的。layer2根据这5个初步判断给出最终结论是好学生、一般学生还是差学生。网络中的每个神经元比如layer1的5个输出都在学习数据中的某种模式。通过训练这些神经元会变得越来越擅长识别重要的特征。4. 训练模型让网络学会识别模式现在网络结构有了但它还什么都不会。我们需要用数据来训练它就像教小孩认字一样。4.1 设置训练参数训练一个神经网络需要三样东西损失函数告诉网络它的预测有多错优化器告诉网络如何调整自己来减少错误训练循环反复用数据训练网络# 设置训练参数 learning_rate 0.01 num_epochs 100 # 训练100轮 # 损失函数衡量预测与真实标签的差距 criterion nn.CrossEntropyLoss() # 优化器根据损失调整网络参数 optimizer optim.SGD(model.parameters(), lrlearning_rate) # 记录训练过程中的损失值方便后面查看 losses []CrossEntropyLoss是分类任务常用的损失函数它特别适合多类别分类。SGD随机梯度下降是最基本的优化算法它会根据损失的大小来调整网络的参数。4.2 开始训练现在让我们开始真正的训练过程# 训练循环 for epoch in range(num_epochs): # 前向传播用当前网络做预测 outputs model(X) # 计算损失预测结果与真实标签的差距 loss criterion(outputs, y) # 反向传播计算每个参数应该如何调整 optimizer.zero_grad() # 清空之前的梯度 loss.backward() # 计算新的梯度 # 更新参数根据梯度调整网络参数 optimizer.step() # 记录损失 losses.append(loss.item()) # 每10轮打印一次损失 if (epoch 1) % 10 0: print(fEpoch [{epoch1}/{num_epochs}], Loss: {loss.item():.4f}) print(训练完成)运行这段代码你会看到损失值逐渐下降Epoch [10/100], Loss: 1.0986 Epoch [20/100], Loss: 1.0986 ... Epoch [100/100], Loss: 1.0986等等你可能会发现损失值没有变化这是正常的因为我们用的是随机数据网络确实学不到什么规律。但重要的是你看到了完整的训练流程。4.3 可视化训练过程让我们看看损失值的变化情况# 绘制损失曲线 plt.figure(figsize(10, 5)) plt.plot(losses) plt.title(Training Loss Over Time) plt.xlabel(Epoch) plt.ylabel(Loss) plt.grid(True) plt.show()你会看到一个波动但总体稳定的损失曲线。在真实数据上这个曲线应该是逐渐下降的。5. 使用真实数据MNIST手写数字识别刚才我们用的是随机数据现在让我们用真实的数据集来体验一下真正的AI训练。MNIST是一个经典的手写数字数据集包含0-9十个数字。5.1 加载MNIST数据集PyTorch提供了方便的数据集加载工具from torchvision import datasets, transforms # 数据预处理将图像转换为张量并归一化 transform transforms.Compose([ transforms.ToTensor(), transforms.Normalize((0.5,), (0.5,)) ]) # 下载并加载训练集 train_dataset datasets.MNIST( root./data, trainTrue, transformtransform, downloadTrue ) # 创建数据加载器 train_loader torch.utils.data.DataLoader( datasettrain_dataset, batch_size64, # 每次处理64张图片 shuffleTrue # 打乱数据顺序 ) # 查看数据信息 print(f训练集大小: {len(train_dataset)}) print(f批次数量: {len(train_loader)}) # 查看一个批次的数据 data_iter iter(train_loader) images, labels next(data_iter) print(f图像形状: {images.shape}) # [64, 1, 28, 28] print(f标签形状: {labels.shape}) # [64] print(f标签示例: {labels[:10]}) # 前10个标签运行后你会看到训练集大小: 60000 批次数量: 938 图像形状: torch.Size([64, 1, 28, 28]) 标签形状: torch.Size([64]) 标签示例: tensor([5, 0, 4, 1, 9, 2, 1, 3, 1, 4])我们有6万张训练图片每张图片是28x28像素的黑白图像所以通道数是1。5.2 构建适合MNIST的网络28x28的图像比我们之前的10个特征大得多所以需要稍微复杂一点的网络class MNISTNet(nn.Module): def __init__(self): super(MNISTNet, self).__init__() # 第一层将28x28784个像素展平 self.flatten nn.Flatten() # 全连接层 self.fc1 nn.Linear(28*28, 128) # 784 - 128 self.relu nn.ReLU() self.fc2 nn.Linear(128, 64) # 128 - 64 self.fc3 nn.Linear(64, 10) # 64 - 10 (10个数字) def forward(self, x): x self.flatten(x) x self.fc1(x) x self.relu(x) x self.fc2(x) x self.relu(x) x self.fc3(x) return x model MNISTNet() print(model)这个网络有三层输入层784个像素 - 128个神经元隐藏层128个神经元 - 64个神经元输出层64个神经元 - 10个输出对应0-9十个数字5.3 训练MNIST网络# 重新设置优化器和损失函数 criterion nn.CrossEntropyLoss() optimizer optim.Adam(model.parameters(), lr0.001) # 使用Adam优化器 # 训练参数 num_epochs 5 # 先训练5轮看看效果 total_step len(train_loader) losses [] accuracies [] for epoch in range(num_epochs): for i, (images, labels) in enumerate(train_loader): # 前向传播 outputs model(images) loss criterion(outputs, labels) # 反向传播和优化 optimizer.zero_grad() loss.backward() optimizer.step() # 记录损失 losses.append(loss.item()) # 每100个批次计算一次准确率 if (i1) % 100 0: # 计算准确率 _, predicted torch.max(outputs.data, 1) correct (predicted labels).sum().item() accuracy correct / labels.size(0) accuracies.append(accuracy) print(fEpoch [{epoch1}/{num_epochs}], Step [{i1}/{total_step}], fLoss: {loss.item():.4f}, Accuracy: {accuracy:.4f}) print(MNIST训练完成)这次你会看到损失在下降准确率在上升Epoch [1/5], Step [100/938], Loss: 0.5123, Accuracy: 0.8594 Epoch [1/5], Step [200/938], Loss: 0.3014, Accuracy: 0.9062 ... Epoch [5/5], Step [900/938], Loss: 0.0987, Accuracy: 0.9688看准确率从85%提升到了96%以上网络真的学会了识别手写数字5.4 测试模型效果训练完成后让我们用测试集看看模型的实际表现# 加载测试集 test_dataset datasets.MNIST( root./data, trainFalse, transformtransform ) test_loader torch.utils.data.DataLoader( datasettest_dataset, batch_size64, shuffleFalse ) # 在测试集上评估 model.eval() # 设置模型为评估模式 with torch.no_grad(): # 不计算梯度节省内存 correct 0 total 0 for images, labels in test_loader: outputs model(images) _, predicted torch.max(outputs.data, 1) total labels.size(0) correct (predicted labels).sum().item() print(f测试集准确率: {100 * correct / total:.2f}%)你会看到类似这样的结果测试集准确率: 97.23%这意味着我们的模型在没见过的测试图片上识别正确率达到了97%以上对于一个只有三层的简单网络来说这个结果相当不错了。6. 总结与下一步恭喜你已经完成了第一个完整的AI模型训练流程。让我们回顾一下今天学到的内容6.1 关键步骤回顾环境搭建使用预置的PyTorch 2.6镜像一分钟内获得完整的开发环境数据准备学会了如何生成模拟数据以及如何加载真实数据集MNIST网络构建用PyTorch的nn.Module创建了自己的神经网络模型训练理解了损失函数、优化器和训练循环的作用效果评估在测试集上验证了模型的真实表现整个过程你可能只用了不到30分钟但已经走完了AI开发的核心流程。6.2 你可以尝试的下一步现在你已经有了基础可以尝试以下方向深入修改网络结构增加更多层、改变神经元数量看看准确率如何变化尝试不同优化器把Adam换成SGD或RMSprop比较训练效果使用更复杂的数据集尝试CIFAR-10彩色图像分类添加可视化在训练过程中实时显示损失曲线和准确率曲线保存和加载模型学习如何保存训练好的模型下次直接使用6.3 实用建议从小开始就像我们今天做的从简单网络、小数据集开始逐步增加复杂度多实验AI很大程度上是实验科学多尝试不同的参数和结构善用Jupyter利用Notebook的交互特性一段段测试代码及时查看结果查阅文档PyTorch官方文档非常完善遇到问题先查文档最重要的是不要被AI吓到。它本质上就是一些数学和代码通过今天的实践你应该已经感受到了入门并没有那么难。每个复杂的模型都是由这样简单的模块组成的。现在你有了一个可以运行的PyTorch环境一套完整的代码模板和一次成功的训练经验。接下来试着修改代码创造你自己的第一个AI模型吧获取更多AI镜像想探索更多AI镜像和应用场景访问 CSDN星图镜像广场提供丰富的预置镜像覆盖大模型推理、图像生成、视频生成、模型微调等多个领域支持一键部署。