手把手教学使用PyTorch 2.8镜像快速创建你的第一个深度学习项目你是不是一直想尝试深度学习但被复杂的环境配置、版本冲突和依赖问题劝退了别担心今天我们就用一个最简单、最直接的方法让你在10分钟内跑通第一个深度学习模型。想象一下你拿到一台新电脑想立刻开始写代码、训练模型而不是花一整天去折腾Python版本、CUDA驱动和PyTorch安装。PyTorch 2.8镜像就是为你准备的“开箱即用”解决方案。它预装了所有必要的工具就像一台预装了所有软件的“深度学习专用电脑”插上电就能用。这篇文章我会带你从零开始用这个镜像完成三个目标快速启动学会如何一键启动这个深度学习环境。上手实战亲手写代码训练一个能识别手写数字的神经网络。理解核心明白PyTorch最基本的几个概念为以后的学习打下基础。准备好了吗让我们开始吧。1. 环境准备一分钟启动你的深度学习工作站首先你需要一个可以运行这个镜像的地方。通常你可以在支持Docker的云服务器、本地安装了Docker的电脑或者像CSDN星图这样的AI开发平台上找到它。我们以最常见的网页访问方式为例。1.1 找到并启动镜像当你找到“PyTorch 2.8”这个镜像后启动它。这个过程通常只需要点击一个“创建”或“运行”按钮。稍等片刻系统会为你分配好计算资源并启动环境。启动成功后你会看到一个访问链接通常是一个Jupyter Lab的网址。点击它你的浏览器会打开一个全新的编程界面。1.2 认识你的新工作台Jupyter Lab第一次进入Jupyter Lab界面可能看起来有点复杂但其实核心就几个部分左侧文件浏览器就像电脑上的文件夹你可以在这里创建、管理你的代码文件。中间的主区域用来编写和运行代码。顶部的菜单栏包含文件、编辑、运行等操作。我们最常用的是创建一个“Notebook”。Notebook是一种特殊的文件它允许你把代码、文字说明甚至图片混合在一起非常适合做实验和教学。操作步骤在Launcher启动器页面点击“Python 3”图标下的“Notebook”。或者在左侧文件浏览器空白处右键选择“New” - “Notebook” - “Python 3”。一个新的Notebook标签页就打开了。你会看到一个空白的“单元格”Cell光标在闪烁等着你输入代码。2. 第一个项目手写数字识别现在环境已经就绪我们来做一个经典的入门项目用神经网络识别手写数字MNIST数据集。这个任务就像教电脑认识0-9这十个数字。2.1 第一步导入必要的工具包在第一个单元格里输入以下代码然后按Shift Enter运行。这行代码会执行单元格并自动跳到下一个新单元格。import torch import torch.nn as nn import torch.optim as optim from torchvision import datasets, transforms import matplotlib.pyplot as plt # 检查环境是否正常特别是GPU print(fPyTorch版本: {torch.__version__}) print(fCUDA是否可用: {torch.cuda.is_available()}) if torch.cuda.is_available(): print(f当前GPU设备: {torch.cuda.get_device_name(0)})运行后你应该能看到类似这样的输出PyTorch版本: 2.8.0 CUDA是否可用: True 当前GPU设备: NVIDIA GeForce RTX 4090看到“CUDA可用”和你的GPU型号恭喜你这意味着你的深度学习环境已经完美就绪并且可以使用GPU来加速计算这比用CPU快几十倍甚至上百倍。简单解释一下torchPyTorch的核心库。torch.nn里面包含了构建神经网络需要的各种“积木”比如层Layer、激活函数等。torch.optim优化器用来告诉神经网络如何从错误中学习。torchvision专门处理图像数据的工具包我们用它来下载和准备手写数字图片数据集。matplotlib.pyplot画图工具用来看看我们的数据长什么样。2.2 第二步准备数据——把图片变成电脑能懂的数字电脑不认识图片只认识数字。所以我们需要把图片转换成数字矩阵并做一些标准化处理让模型学起来更容易。# 定义数据转换将图片转换为TensorPyTorch的数据格式并做归一化 transform transforms.Compose([ transforms.ToTensor(), # 把图片变成数字矩阵 transforms.Normalize((0.1307,), (0.3081,)) # 对数据进行标准化让数值分布更均匀模型训练更稳定 ]) # 下载并加载训练数据 train_dataset datasets.MNIST(./data, trainTrue, downloadTrue, transformtransform) train_loader torch.utils.data.DataLoader(train_dataset, batch_size64, shuffleTrue) # 下载并加载测试数据 test_dataset datasets.MNIST(./data, trainFalse, transformtransform) test_loader torch.utils.data.DataLoader(test_dataset, batch_size1000, shuffleFalse) # 让我们看一眼数据 examples iter(train_loader) sample_data, sample_labels next(examples) print(f一个批次的数据形状: {sample_data.shape}) # 应该是 [64, 1, 28, 28] print(f对应的标签形状: {sample_labels.shape}) # 应该是 [64] print(f标签值: {sample_labels[:10]}) # 打印前10个标签看看 # 可视化几张图片 fig, axes plt.subplots(1, 5, figsize(10, 2)) for i in range(5): axes[i].imshow(sample_data[i][0], cmapgray) # [i][0] 取第i张图片的第0个通道灰度图只有一个通道 axes[i].set_title(fLabel: {sample_labels[i].item()}) axes[i].axis(off) plt.show()这段代码做了几件事定义转换告诉程序怎么处理每张图片。下载数据自动从网上下载MNIST数据集到本地的./data文件夹。创建数据加载器DataLoader是一个非常好用的工具它能自动帮我们分批batch读取数据并打乱顺序。batch_size64意味着每次给模型看64张图片。查看数据打印出数据的形状并用matplotlib画出5张图片看看。你会看到28x28像素的灰度数字图片。2.3 第三步搭建神经网络——设计一个“大脑”现在我们来设计一个非常简单的神经网络。你可以把它想象成一个有多层过滤器的管道图片数据从一端进去经过层层处理最终在另一端输出一个答案0-9哪个数字的概率最大。class SimpleNN(nn.Module): # 必须继承 nn.Module def __init__(self): super(SimpleNN, self).__init__() # 定义网络层 self.flatten nn.Flatten() # 将二维图片展平成一维向量 (1*28*28) - 784 self.fc1 nn.Linear(28*28, 128) # 全连接层1输入784维输出128维 self.relu nn.ReLU() # 激活函数引入非线性 self.fc2 nn.Linear(128, 64) # 全连接层2输入128维输出64维 self.fc3 nn.Linear(64, 10) # 全连接层3输入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) # 注意这里没有用Softmax因为后面的损失函数CrossEntropyLoss自带Softmax return x # 创建模型实例并移动到GPU如果可用 device torch.device(cuda if torch.cuda.is_available() else cpu) model SimpleNN().to(device) print(model)这个网络结构很简单输入图片 - 展平 - 全连接层 - 激活 - 全连接层 - 激活 - 全连接层 - 输出。nn.Linear全连接层是最基础的神经网络层。nn.ReLU激活函数让网络能够学习复杂的模式。.to(device)将模型参数放到GPU上这样计算速度会快很多。2.4 第四步训练模型——教“大脑”学习模型建好了但它现在什么都不懂。我们需要用数据来训练它也就是告诉它“这张图片是‘5’你下次看到类似的要说是‘5’”。# 定义损失函数和优化器 criterion nn.CrossEntropyLoss() # 交叉熵损失分类任务常用 optimizer optim.Adam(model.parameters(), lr0.001) # Adam优化器学习率设为0.001 # 训练循环 num_epochs 5 # 把整个训练集过5遍 for epoch in range(num_epochs): model.train() # 设置为训练模式 running_loss 0.0 correct 0 total 0 for batch_idx, (data, target) in enumerate(train_loader): # 将数据也移动到GPU data, target data.to(device), target.to(device) # 前向传播计算预测值 optimizer.zero_grad() # 清空上一轮的梯度 outputs model(data) loss criterion(outputs, target) # 计算损失预测和真实的差距 # 反向传播计算梯度 loss.backward() # 优化根据梯度更新模型参数 optimizer.step() # 统计信息 running_loss loss.item() _, predicted outputs.max(1) total target.size(0) correct predicted.eq(target).sum().item() # 每100个batch打印一次进度 if batch_idx % 100 99: print(fEpoch [{epoch1}/{num_epochs}], Step [{batch_idx1}/{len(train_loader)}], Loss: {running_loss/100:.4f}, Acc: {100.*correct/total:.2f}%) running_loss 0.0 # 每个epoch结束后在测试集上评估一下 model.eval() # 设置为评估模式 test_correct 0 test_total 0 with torch.no_grad(): # 评估时不计算梯度节省内存和计算 for data, target in test_loader: data, target data.to(device), target.to(device) outputs model(data) _, predicted outputs.max(1) test_total target.size(0) test_correct predicted.eq(target).sum().item() print(fEpoch [{epoch1}/{num_epochs}] 测试集准确率: {100.*test_correct/test_total:.2f}%\n)训练过程的核心三步循环前向传播数据输入模型得到预测结果。计算损失比较预测结果和真实标签算出差距损失值。反向传播与优化根据损失值计算模型每个参数的“调整方向”梯度然后优化器按照这个方向微调参数让模型下次预测得更准。你会看到控制台不断打印出损失在下降准确率在上升。几轮Epoch之后测试集准确率可能达到97%以上这意味着你成功训练了一个能识别手写数字的AI。2.5 第五步使用模型——让你的模型干活训练好的模型可以保存下来以后直接加载使用不用再训练。# 保存模型 torch.save(model.state_dict(), my_first_mnist_model.pth) print(模型已保存为 my_first_mnist_model.pth) # 假设我们重新加载模型并使用模拟一个新环境 new_model SimpleNN().to(device) new_model.load_state_dict(torch.load(my_first_mnist_model.pth)) new_model.eval() # 用测试集的一张图片做预测 test_iter iter(test_loader) test_data, test_label next(test_iter) single_image test_data[0:1].to(device) # 取第一张图片并保持batch维度 single_label test_label[0].item() with torch.no_grad(): output new_model(single_image) prediction output.argmax(dim1).item() print(f真实标签: {single_label}, 模型预测: {prediction}) # 可视化这张图片 plt.imshow(test_data[0][0], cmapgray) plt.title(f真实: {single_label}, 预测: {prediction}) plt.axis(off) plt.show()运行这段代码你会看到模型成功预测了一张它从未见过的测试图片的数字。3. 理解核心PyTorch到底在做什么通过上面的实战你应该对流程有了感性认识。现在我们来梳理一下PyTorch的几个核心思想张量Tensor这是PyTorch最基本的数据结构你可以把它理解为N维数组。我们的图片、模型的参数全都是张量。它最大的优点是可以在GPU上高速计算。自动求导Autograd这是PyTorch的“魔法”。我们只需要定义前向传播数据如何通过网络系统会自动记录所有操作并为我们计算反向传播所需的梯度。这就是loss.backward()一行代码能完成所有梯度计算的原因。计算图动态定义PyTorch采用“动态图”方式每次前向传播都会构建一个新的计算图。这让调试变得非常直观你可以像调试普通Python代码一样使用print或调试器。模块化设计nn.Module通过继承nn.Module来构建模型可以将网络层、参数、前向传播逻辑封装在一起结构清晰复用方便。4. 总结与下一步恭喜你你已经完成了第一个深度学习项目。回顾一下我们做了什么一分钟启动了一个包含PyTorch 2.8和CUDA的完整环境。亲手搭建并训练了一个神经网络准确识别手写数字。理解了数据加载、模型定义、训练循环、模型保存等核心流程。这个简单的全连接网络只是开始。PyTorch的强大之处在于它能轻松构建更复杂的模型例如处理图像的卷积神经网络CNN、处理序列的循环神经网络RNN和Transformer。你刚刚学会的nn.Module、DataLoader、optimizer等概念在这些复杂模型中完全通用。给你的下一步建议改改参数试试调整学习率lr、批次大小batch_size、训练轮数epochs或者增加减少网络层的神经元数量看看准确率会怎么变化。换个模型尝试用PyTorch自带的更强大的模型比如在torchvision.models里有一个叫resnet18的模型你可以试着用它来做图像分类可能需要调整输入输出层。玩新数据集torchvision.datasets里还有CIFAR-10彩色物体图片、Fashion-MNIST衣物图片等有趣的数据集。探索社区遇到问题PyTorch有非常活跃的社区和丰富的官方教程。记住几乎所有你遇到的问题网上都有答案。最重要的是你已经跨过了“环境配置”这个最大的门槛。现在你可以专注于算法和模型本身尽情探索深度学习的奇妙世界了。获取更多AI镜像想探索更多AI镜像和应用场景访问 CSDN星图镜像广场提供丰富的预置镜像覆盖大模型推理、图像生成、视频生成、模型微调等多个领域支持一键部署。