news 2026/7/8 9:23:39

PyTorch-2.x入门教程:在Jupyter中运行第一个模型

作者头像

张小明

前端开发工程师

1.2k 24
文章封面图
PyTorch-2.x入门教程:在Jupyter中运行第一个模型

PyTorch-2.x入门教程:在Jupyter中运行第一个模型

1. 为什么选这个镜像?开箱即用的深度学习起点

你是不是也经历过这样的场景:想跑一个PyTorch模型,结果卡在环境配置上——装CUDA版本不对、pip源太慢、Jupyter打不开、matplotlib报错……折腾两小时,代码还没写一行。

这个叫PyTorch-2.x-Universal-Dev-v1.0的镜像,就是为解决这些问题而生的。它不是从零开始的手动搭建环境,而是基于官方PyTorch底包直接构建的“成品开发舱”:Python 3.10+、CUDA 11.8/12.1双支持(RTX 30/40系、A800/H800全兼容)、预装Pandas/Numpy/Matplotlib/JupyterLab等全套工具链,连Shell都配好了语法高亮和常用别名。

更关键的是——它干净。没有冗余缓存,没有冲突包,没有隐藏的依赖陷阱;阿里云和清华源已默认配置,pip install秒级响应;所有库版本经过实测协同,不会出现“torchvision装不上”或“matplotlib画不出图”的经典崩溃现场。

换句话说:你点开就能写模型,而不是点开先修电脑。

2. 环境验证:三步确认你的GPU真正在工作

别急着写import torch,先花30秒确认硬件和驱动已就绪。很多初学者的“模型不加速”,其实只是GPU根本没被识别。

2.1 终端里敲两行命令,看结果是否“诚实”

打开终端(Terminal),依次执行:

nvidia-smi

你应该看到类似这样的输出(关键看右上角的GPU型号和显存使用):

+-----------------------------------------------------------------------------+ | NVIDIA-SMI 535.104.05 Driver Version: 535.104.05 CUDA Version: 12.2 | |-------------------------------+----------------------+----------------------+ | GPU Name Persistence-M| Bus-Id Disp.A | Volatile Uncorr. ECC | | Fan Temp Perf Pwr:Usage/Cap| Memory-Usage | GPU-Util Compute M. | |===============================================+======================+======================| | 0 NVIDIA RTX 4090 On | 00000000:01:00.0 On | N/A | | 36% 42C P0 127W / 450W | 212MiB / 24576MiB | 0% Default | +-----------------------------------------------------------------------------+

再执行:

python -c "import torch; print(torch.cuda.is_available())"

如果输出是True,恭喜——你的GPU已被PyTorch成功接管。
如果输出是False,请暂停,检查镜像是否启动时勾选了GPU资源(常见于云平台部署界面),不要往下硬跑CPU版。

小提醒torch.cuda.is_available()返回True≠ 模型一定用GPU。后续代码中必须显式调用.to('cuda'),这点新手极易忽略。

2.2 JupyterLab启动与内核确认

在镜像首页或终端中输入:

jupyter lab --ip=0.0.0.0 --port=8888 --no-browser --allow-root

复制终端输出的带token=的完整URL(形如http://127.0.0.1:8888/lab?token=xxx),粘贴进浏览器。进入后,新建一个Python Notebook。

在第一个cell里输入并运行:

import torch print("PyTorch版本:", torch.__version__) print("CUDA可用:", torch.cuda.is_available()) if torch.cuda.is_available(): print("当前设备:", torch.cuda.get_device_name(0))

你会看到类似输出:

PyTorch版本: 2.3.0+cu121 CUDA可用: True 当前设备: NVIDIA RTX 4090

这说明:环境、GPU、Jupyter三者已打通。你可以放心进入下一环节。

3. 写第一个模型:从随机数据到训练完成,不到20行

我们不从MNIST开始,也不加载预训练模型——就用纯随机生成的数据,搭一个最简但完整的训练流程:定义网络、准备数据、前向传播、计算损失、反向传播、更新参数。目的不是做任务,而是看清PyTorch 2.x的“心跳节奏”。

3.1 构建一个极简全连接网络

在新cell中输入以下代码(已适配PyTorch 2.x语法,无过时写法):

import torch import torch.nn as nn import torch.optim as optim import numpy as np # 定义模型:2层全连接,输入10维 → 隐藏层32维 → 输出1维(回归任务) class SimpleNet(nn.Module): def __init__(self): super().__init__() self.layer1 = nn.Linear(10, 32) self.layer2 = nn.Linear(32, 1) self.relu = nn.ReLU() def forward(self, x): x = self.relu(self.layer1(x)) x = self.layer2(x) return x # 初始化模型和优化器 model = SimpleNet() optimizer = optim.Adam(model.parameters(), lr=0.01) criterion = nn.MSELoss() # 将模型移到GPU(关键!否则全程CPU跑) if torch.cuda.is_available(): model = model.to('cuda') criterion = criterion.to('cuda')

注意这三处细节:

  • nn.ReLU()是函数式API(F.relu)的模块化写法,更清晰;
  • model.to('cuda')必须在定义完模型后立即执行,且损失函数也要.to('cuda')
  • optim.Adam(...)直接传入model.parameters(),无需手动遍历。

3.2 生成模拟数据并训练5个epoch

继续在同一Notebook中新建cell:

# 生成1000个样本,每个样本10维特征 + 1维标签(随机但有线性关系) X = torch.randn(1000, 10) y_true = (X @ torch.randn(10, 1) + torch.randn(1000, 1) * 0.1) # 加点噪声 # 移到GPU if torch.cuda.is_available(): X, y_true = X.to('cuda'), y_true.to('cuda') # 训练循环 for epoch in range(5): optimizer.zero_grad() # 清空梯度(PyTorch 2.x仍需手动) y_pred = model(X) # 前向传播 loss = criterion(y_pred, y_true) # 计算损失 loss.backward() # 反向传播 optimizer.step() # 更新参数 if epoch % 1 == 0: print(f"Epoch {epoch}, Loss: {loss.item():.4f}")

运行后,你会看到类似输出:

Epoch 0, Loss: 1.2483 Epoch 1, Loss: 0.8721 Epoch 2, Loss: 0.5937 Epoch 3, Loss: 0.3825 Epoch 4, Loss: 0.2419

损失持续下降,说明训练正在生效。这不是“Hello World”,而是真实神经网络的呼吸声。

为什么不用DataLoader?
初学阶段,torch.randn生成的数据足够暴露核心流程。等你熟悉了张量流动、梯度计算、设备迁移,再引入Dataset/DataLoader才不会迷失在封装里。

4. 可视化训练过程:用Matplotlib看懂“学习”发生了什么

光看数字不够直观。我们加3行代码,把每轮的loss画出来——这是你第一次“看见”模型在进步。

4.1 收集loss值并绘图

在训练循环上方,新增一个列表记录loss:

loss_history = []

在训练循环内部,print语句前加一行:

loss_history.append(loss.item())

训练结束后,插入新cell:

import matplotlib.pyplot as plt plt.style.use('seaborn-v0_8') # 使用预装的美化样式 plt.figure(figsize=(6, 4)) plt.plot(loss_history, 'o-', label='Training Loss', color='#2E86AB') plt.xlabel('Epoch') plt.ylabel('MSE Loss') plt.title('Model Training Progress') plt.grid(True, alpha=0.3) plt.legend() plt.show()

你会看到一条清晰下降的曲线。这就是你亲手“教”模型的过程——没有黑箱,只有数学和代码。

小技巧:Jupyter中plt.show()可省略,但显式写出更稳妥;plt.style.use('seaborn-v0_8')是镜像预装的美化方案,无需额外安装。

5. 模型保存与加载:让成果不随Notebook关闭而消失

训练完的模型,默认只存在内存里。关掉Jupyter,一切归零。下面教你两行代码永久保存:

5.1 保存模型权重(推荐方式)

# 保存模型状态字典(轻量、安全、跨平台) torch.save(model.state_dict(), "simple_net_weights.pth") print(" 模型权重已保存至 simple_net_weights.pth")

5.2 加载并验证(新开一个Notebook测试)

# 新建Notebook,执行以下代码 import torch from pathlib import Path # 重新定义相同结构的模型 class SimpleNet(nn.Module): def __init__(self): super().__init__() self.layer1 = nn.Linear(10, 32) self.layer2 = nn.Linear(32, 1) self.relu = nn.ReLU() def forward(self, x): x = self.relu(self.layer1(x)) x = self.layer2(x) return x # 实例化并加载权重 model = SimpleNet() model.load_state_dict(torch.load("simple_net_weights.pth")) model.eval() # 切换到评估模式 # 测试推理 test_input = torch.randn(1, 10) if torch.cuda.is_available(): test_input = test_input.to('cuda') model = model.to('cuda') with torch.no_grad(): pred = model(test_input) print(" 加载成功,预测输出:", pred.item())

输出类似加载成功,预测输出: -0.4218,说明模型已真正“记住”了学到的知识。

重要区别
torch.save(model.state_dict(), ...)保存的是权重,体积小、安全性高;
torch.save(model, ...)保存整个模型对象,包含类定义,但可能因路径/版本问题加载失败。初学者务必用前者。

6. 常见问题速查:新手踩坑,这里已有答案

刚上手时,90%的问题都高度重复。我们把高频报错和解法浓缩成一张表,按需查阅:

报错信息(部分截取)最可能原因一句话解决
OSError: [Errno 12] Cannot allocate memoryDocker内存不足在云平台设置中将内存调至8GB以上
ModuleNotFoundError: No module named 'torch'未激活正确Python环境检查Jupyter右上角Kernel是否为Python 3 (ipykernel),非conda env或其他
RuntimeError: Expected all tensors to be on the same device输入张量和模型不在同一设备所有tensor.to('cuda')model.to('cuda')必须成对出现
AttributeError: 'NoneType' object has no attribute 'grad'忘记optimizer.zero_grad()在每次loss.backward()前必须清梯度
ImportError: libGL.so.1: cannot open shared object file缺少图形库(Matplotlib绘图报错)镜像已预装opencv-python-headless,确保不调用plt.show(block=True)

终极建议:遇到报错,先复制完整错误信息,搜索关键词(如Expected all tensors to be on the same device),99%能在PyTorch官方论坛或Stack Overflow找到匹配答案。别自己猜,高效复用社区智慧。

7. 下一步学什么?从“能跑”到“会调”的三步跃迁

你现在已具备PyTorch 2.x最核心的工程能力:环境验证、GPU调用、模型定义、训练循环、结果可视化、模型持久化。接下来,建议按此路径渐进:

7.1 第一步:用真实数据替换随机数据

  • 下载一个CSV文件(比如房价预测数据集),用pandas.read_csv()加载;
  • torch.tensor()转成张量,注意dtype=torch.float32
  • 替换训练循环中的Xy_true,观察loss下降是否更“真实”。

7.2 第二步:加入数据加载器(DataLoader)

  • 将数据封装为torch.utils.data.Dataset子类;
  • DataLoader实现自动分batch、shuffle、多进程加载;
  • 对比batch_size=32batch_size=128对训练速度和loss曲线的影响。

7.3 第三步:尝试一个经典小任务

  • torchvision.datasets.MNIST加载手写数字;
  • 修改网络输出为10维,损失函数换成nn.CrossEntropyLoss
  • 加入准确率计算:pred.argmax(dim=1) == y_true
  • 这是你迈向CV领域的第一块路标。

记住:所有复杂模型,都是由你刚刚写的那20行代码生长出来的。不必追求一步到位,每一次run cell的成功,都在加固你对深度学习底层逻辑的信任。


获取更多AI镜像

想探索更多AI镜像和应用场景?访问 CSDN星图镜像广场,提供丰富的预置镜像,覆盖大模型推理、图像生成、视频生成、模型微调等多个领域,支持一键部署。

版权声明: 本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若内容造成侵权/违法违规/事实不符,请联系邮箱:809451989@qq.com进行投诉反馈,一经查实,立即删除!
网站建设 2026/7/1 19:57:34

颠覆式视觉增强:ClickShow重构桌面交互体验

颠覆式视觉增强:ClickShow重构桌面交互体验 【免费下载链接】ClickShow 鼠标点击特效 项目地址: https://gitcode.com/gh_mirrors/cl/ClickShow 在线教学时学生总跟不上你的鼠标操作?远程演示中观众频频询问"点哪里了"?屏幕…

作者头像 李华
网站建设 2026/7/1 13:20:15

Open-AutoGLM能否商用?许可证与合规使用指南

Open-AutoGLM能否商用?许可证与合规使用指南 Open-AutoGLM 是智谱开源的手机端 AI Agent 框架,它不是简单的模型推理工具,而是一套完整的“视觉理解 意图解析 自动执行”闭环系统。它的核心价值在于让大模型真正“看见”手机屏幕、“听懂”…

作者头像 李华
网站建设 2026/7/1 13:20:14

Emotion2Vec+ Large镜像短音频情感识别最佳实践

Emotion2Vec Large镜像短音频情感识别最佳实践 1. 为什么选择Emotion2Vec Large做短音频情感识别? 在语音AI应用落地过程中,我们经常遇到一个现实矛盾:模型能力很强,但实际用起来效果不稳定。很多开发者反馈,明明用了…

作者头像 李华
网站建设 2026/7/1 6:39:09

全能B站音频下载工具:高效获取高质量音频的完美解决方案

全能B站音频下载工具:高效获取高质量音频的完美解决方案 【免费下载链接】BilibiliDown (GUI-多平台支持) B站 哔哩哔哩 视频下载器。支持稍后再看、收藏夹、UP主视频批量下载|Bilibili Video Downloader 😳 项目地址: https://gitcode.com/gh_mirrors…

作者头像 李华
网站建设 2026/7/6 3:36:00

情感分析全景探索:从理论到实践的社交媒体文本解析之道

情感分析全景探索:从理论到实践的社交媒体文本解析之道 【免费下载链接】vaderSentiment VADER Sentiment Analysis. VADER (Valence Aware Dictionary and sEntiment Reasoner) is a lexicon and rule-based sentiment analysis tool that is specifically attuned…

作者头像 李华