PyTorch 2.5快速上手:用官方镜像10分钟跑通第一个神经网络

张开发
2026/4/15 6:14:39 15 分钟阅读

分享文章

PyTorch 2.5快速上手:用官方镜像10分钟跑通第一个神经网络
PyTorch 2.5快速上手用官方镜像10分钟跑通第一个神经网络1. 前言为什么选择PyTorch 2.5深度学习框架的选择往往让初学者感到困惑。PyTorch作为当前最流行的框架之一以其直观的接口设计和出色的动态计算图特性赢得了大量开发者的青睐。最新发布的PyTorch 2.5版本在性能、易用性和功能完备性上都有了显著提升。本文将带你使用官方预置的PyTorch 2.5镜像在10分钟内完成第一个神经网络的搭建和训练。无需繁琐的环境配置无需担心CUDA驱动问题我们将直接进入最有趣的部分——编写和运行深度学习代码。2. 环境准备一键启动PyTorch 2.52.1 镜像特点与优势PyTorch-CUDA基础镜像已经为你准备好了以下组件PyTorch 2.5预安装CUDA工具包支持主流NVIDIA显卡常用科学计算库NumPy、Matplotlib等Jupyter Notebook开发环境SSH远程访问支持这意味着你可以跳过数小时甚至数天的环境配置时间直接开始深度学习开发。2.2 启动开发环境根据你的使用习惯可以选择以下两种方式之一2.2.1 Jupyter Notebook方式推荐新手在镜像启动页面点击Jupyter按钮浏览器会自动打开Jupyter Lab界面新建一个Python 3 Notebook文件.ipynb后缀2.2.2 SSH连接方式适合高级用户获取镜像提供的SSH连接信息在终端输入ssh usernameip -p port输入密码后即可访问远程环境可以使用vim或nano编辑.py文件3. 第一个神经网络手写数字识别我们将使用经典的MNIST数据集构建一个能够识别手写数字的简单神经网络。这个例子虽然简单但包含了深度学习开发的所有关键步骤。3.1 准备数据集在新建的Notebook或Python文件中输入以下代码import torch from torchvision import datasets, transforms # 定义数据预处理 transform transforms.Compose([ transforms.ToTensor(), # 将PIL图像转换为Tensor transforms.Normalize((0.1307,), (0.3081,)) # MNIST数据集的均值和标准差 ]) # 下载并加载训练集 train_dataset datasets.MNIST( ./data, trainTrue, downloadTrue, transformtransform ) # 下载并加载测试集 test_dataset datasets.MNIST( ./data, trainFalse, transformtransform ) # 创建数据加载器 train_loader torch.utils.data.DataLoader( train_dataset, batch_size64, shuffleTrue ) test_loader torch.utils.data.DataLoader( test_dataset, batch_size1000, shuffleFalse )这段代码会自动下载MNIST数据集约60MB并将其转换为PyTorch可处理的格式。DataLoader会帮我们管理数据的批量加载和随机打乱。3.2 定义神经网络模型在PyTorch中定义模型非常简单我们创建一个继承自nn.Module的类import torch.nn as nn import torch.nn.functional as F class Net(nn.Module): def __init__(self): super(Net, self).__init__() self.conv1 nn.Conv2d(1, 32, 3, 1) # 输入通道1输出通道323x3卷积核 self.conv2 nn.Conv2d(32, 64, 3, 1) self.dropout1 nn.Dropout(0.25) self.dropout2 nn.Dropout(0.5) self.fc1 nn.Linear(9216, 128) # 全连接层 self.fc2 nn.Linear(128, 10) # 输出层10类 def forward(self, x): x self.conv1(x) x F.relu(x) x self.conv2(x) x F.relu(x) x F.max_pool2d(x, 2) x self.dropout1(x) x torch.flatten(x, 1) x self.fc1(x) x F.relu(x) x self.dropout2(x) x self.fc2(x) return F.log_softmax(x, dim1) # 创建模型实例 model Net() print(model)这个网络包含两个卷积层、两个dropout层和两个全连接层是一个典型的CNN结构适合处理图像数据。3.3 训练模型现在我们来定义训练过程from torch.optim import Adam device torch.device(cuda if torch.cuda.is_available() else cpu) model.to(device) # 将模型移动到GPU如果可用 optimizer Adam(model.parameters(), lr0.001) # 使用Adam优化器 def train(epoch): model.train() # 设置为训练模式 for batch_idx, (data, target) in enumerate(train_loader): data, target data.to(device), target.to(device) optimizer.zero_grad() # 清空梯度 output model(data) # 前向传播 loss F.nll_loss(output, target) # 计算损失 loss.backward() # 反向传播 optimizer.step() # 更新参数 if batch_idx % 100 0: print(fTrain Epoch: {epoch} [{batch_idx * len(data)}/{len(train_loader.dataset)} f({100. * batch_idx / len(train_loader):.0f}%)]\tLoss: {loss.item():.6f}) # 训练5个epoch for epoch in range(1, 6): train(epoch)这段代码会进行5轮训练每处理100个batch就打印一次当前的训练进度和损失值。如果GPU可用训练速度会显著加快。3.4 测试模型性能训练完成后我们需要评估模型在测试集上的表现def test(): model.eval() # 设置为评估模式 test_loss 0 correct 0 with torch.no_grad(): # 不计算梯度 for data, target in test_loader: data, target data.to(device), target.to(device) output model(data) test_loss F.nll_loss(output, target, reductionsum).item() pred output.argmax(dim1, keepdimTrue) correct pred.eq(target.view_as(pred)).sum().item() test_loss / len(test_loader.dataset) print(f\nTest set: Average loss: {test_loss:.4f}, fAccuracy: {correct}/{len(test_loader.dataset)} f({100. * correct / len(test_loader.dataset):.0f}%)\n) test()经过5轮训练这个简单模型的准确率通常能达到98%以上说明我们的第一个神经网络已经成功学会了识别手写数字4. 关键概念解析4.1 什么是TensorTensor是PyTorch中的核心数据结构可以看作是多维数组。它与NumPy的ndarray类似但最大的区别是Tensor可以在GPU上加速计算。# 创建一个随机Tensor x torch.rand(3, 3) print(x) print(x.device) # 查看Tensor所在的设备(cpu/cuda) # 将Tensor移动到GPU if torch.cuda.is_available(): x x.to(cuda) print(x.device)4.2 自动微分机制PyTorch的autograd包提供了自动微分功能这是训练神经网络的核心# 创建一个需要计算梯度的Tensor x torch.ones(2, 2, requires_gradTrue) y x 2 z y * y * 3 out z.mean() print(out) out.backward() # 自动计算梯度 print(x.grad) # 查看x的梯度4.3 模型保存与加载训练好的模型可以保存下来供后续使用# 保存模型 torch.save(model.state_dict(), mnist_cnn.pt) # 加载模型 loaded_model Net() loaded_model.load_state_dict(torch.load(mnist_cnn.pt)) loaded_model.eval()5. 总结与下一步恭喜你已经成功完成了使用PyTorch官方镜像快速搭建开发环境构建并训练了一个卷积神经网络在MNIST数据集上实现了高精度分类5.1 如何进一步提升想要继续深入学习PyTorch和深度学习可以尝试调整网络结构增加/减少层数改变激活函数尝试不同的优化器和学习率在更复杂的数据集如CIFAR-10上训练学习使用TensorBoard可视化训练过程5.2 资源推荐官方文档https://pytorch.org/docs/stable/index.htmlPyTorch教程https://pytorch.org/tutorials/CSDN PyTorch社区https://pytorch.csdn.net/获取更多AI镜像想探索更多AI镜像和应用场景访问 CSDN星图镜像广场提供丰富的预置镜像覆盖大模型推理、图像生成、视频生成、模型微调等多个领域支持一键部署。

更多文章