python:pyTorch 入门教程

为PyTorch设计学习路径,需要结合系统性的知识充分的动手实践 。你可以根据个人基础,参考下表中的6类不同教程,它们各有侧重。

下面的路线图和学习方法能帮你更好地利用这些资源。

📚 PyTorch学习资源概览

下面的表格整理了几个主流教程,你可以根据自己的需求和基础进行选择。

资源名称 核心特点 适用人群 获取/备注
《深入浅出PyTorch》 开源免费 、社区驱动、内容系统全面,涵盖基础、实战、生态与部署。 首选推荐,适合绝大多数自学者,尤其是喜欢跟随开源项目系统学习的人。 可在启智AI开源社区等平台获取。
香港科技大学"PyTorch Zero to All" 经典速成 (3-4天),直击核心 (线性模型、梯度下降、CNN/RNN),代码和PPT完整 时间有限、想快速建立核心概念的初学者,或需要快速回顾核心知识的开发者。 GitHub提供代码,PPT链接可用。
国家高等教育智慧教育平台课程 官方权威从Python零基础讲起,包含NumPy、Pandas等前置知识,体系完整。 零编程基础 ,希望获得体系化大学课程体验的初学者。 需在平台注册学习,完全免费。
机械工业出版社《PyTorch深度学习项目教程》 项目驱动(8个由浅入深项目),实践性强,贴合高职教育需求。 喜欢通过做项目来学习 的实践派,可作为《深入浅出PyTorch》的补充实战材料 需购买书籍,内容实用。
《动手学PyTorch建模与应用》 涵盖深度学习与大模型,包含50个动手案例,注重大模型本地部署与微调。 学完基础后,希望向大语言模型(LLM)等前沿应用拓展的进阶学习者。 清华大学出版社书籍,需购买。
科学网博客 / 阿里云文章 知识大纲极简入门代码 ,内容较为零散或基础 用于快速了解知识脉络,或查阅某个具体知识点的简单代码示例 适合碎片化阅读参考。

🗺️ 推荐学习路线图

一个有效的学习路径通常遵循"基础 -> 核心 -> 应用 -> 深化"的顺序。

  1. 第一步:打好基础(约1-2周)

    • 前提 :确保你已掌握Python基础语法(变量、循环、函数、类)。如果不会,可以先用国家智慧教育平台的课程入门。
    • 核心 :学习PyTorch核心数据结构------张量(Tensor) 的创建、运算和与NumPy的转换。同时,必须理解自动求导(Autograd) 机制,这是PyTorch实现神经网络训练的基础。
  2. 第二步:跑通第一个模型(约1周)

    • 目标 :建立一个完整的深度学习流程概念
    • 实践 :使用《深入浅出PyTorch》的第四章(Fashion-MNIST时装分类) 进行实战。这会让你熟悉数据加载、模型定义(nn.Module)、损失函数、优化器、训练循环和评估的完整流程。
  3. 第三步:掌握核心网络结构(约2-3周)

    • CNN:用于图像处理。理解卷积、池化等概念,并动手实现一个图像分类模型。
    • RNN/LSTM:用于序列数据(如时间序列、文本)。理解其循环结构和应用场景。
    • Transformer:现代NLP和大模型的基石。理解其自注意力机制,可以尝试一个简单的机器翻译或文本分类项目。
  4. 第四步:进阶与实践(长期)

    • 学技巧 :学习模型调试、自定义层、动态调整学习率、模型可视化等高阶技巧
    • 做项目:在开源社区(如Kaggle、天池)找感兴趣的项目,或复现经典论文的代码。
    • 探前沿:如果想深入大模型领域,可以学习《动手学PyTorch建模与应用》中关于大模型预训练、微调及本地化部署的内容。

💡 学习方法建议

  • 动手至上 :不要只看不练。必须亲手敲代码,即使是对着教程敲,也能加深理解。遇到错误时,尝试独立搜索解决。
  • 由浅入深 :先确保能跑通 简单示例,再尝试修改 参数(如网络层数、学习率),最后从头实现。香港科技大学的速成教程非常适合这个过程。
  • 善用生态 :熟悉torchvision(视觉)、torchtext(文本)、torchaudio(音频)等PyTorch官方生态库,能极大提升开发效率。
  • 交流与复盘:在DataWhale、GitHub等社区参与讨论。定期整理笔记,用博客或技术文档记录自己的项目和思考。

总的来说,我建议你以《深入浅出PyTorch》为主线系统学习 ,用香港科技大学的速成教程快速建立核心概念 ,再通过项目驱动教程强化实战


python torch 安装介绍

PyTorch的安装需要根据你的操作系统、是否使用GPU以及包管理工具偏好来选择。下面我为你整理了最清晰、可靠的安装方案。

🎯 核心安装方案:通过官方渠道

最推荐的方法是直接访问 PyTorch官方网站 ,这是获取最新、最匹配你硬件环境安装命令的唯一权威来源。

  1. 访问官网 :打开 pytorch.org,你会看到如下图所示的配置选择器。
  2. 配置选择 :根据你的实际情况选择:
    • PyTorch Build:稳定版(Stable)即可。
    • Your OS:你的操作系统(Windows、Linux、macOS)。
    • Package :推荐 pip(通用)或 conda(如果你在用Anaconda)。
    • Language:选择 Python。
    • Compute Platform :这是最关键的一步 ,决定了是否能使用GPU加速。
      • 如果有NVIDIA显卡 :请先确保已安装正确版本的 NVIDIA显卡驱动 。然后在官网选择对应的 CUDA版本 (如CUDA 11.8)。不清楚CUDA版本可先在命令行输入 nvidia-smi 查看。
      • 如果无NVIDIA显卡或不确定 :直接选择 CPU 版本。它可在任何电脑上运行,只是训练模型会慢很多。

📦 各平台安装命令示例

完成官网配置后,它会生成对应的安装命令。以下是一些常见情况的示例:

你的环境 推荐安装方式 典型安装命令(请以官网生成命令为准
Windows, 有NVIDIA GPU 使用 pip 和 CUDA pip3 install torch torchvision torchaudio --index-url https://download.pytorch.org/whl/cu118
macOS (Apple Silicon芯片) 使用 pip pip3 install torch torchvision torchaudio
Linux, 有NVIDIA GPU 使用 conda 和 CUDA conda install pytorch torchvision torchaudio pytorch-cuda=11.8 -c pytorch -c nvidia
任何系统, 仅使用CPU 使用 pip (CPU版) pip3 install torch torchvision torchaudio --index-url https://download.pytorch.org/whl/cpu

重要提示务必复制官网为你实时生成的命令,以上命令仅为示例,版本可能已过时。

🔧 详细步骤与验证

  1. 准备Python环境 :确保已安装 Python (建议3.8及以上版本) 。在终端输入 python --version 检查。

  2. 执行安装命令 :将官网生成的命令粘贴到终端执行。

    • 网络问题 :如果下载慢或超时,可以考虑使用国内镜像源 (如清华源、阿里云),或在命令后添加 -i 参数指定镜像。
  3. 验证安装 :安装完成后,打开Python解释器,运行以下代码验证:

    python 复制代码
    import torch
    print(torch.__version__)  # 打印PyTorch版本
    print(torch.cuda.is_available())  # 打印True则代表GPU可用

    如果 torch.cuda.is_available() 返回 True,恭喜你已成功配置GPU加速环境!

❗ 常见问题与解决

  • No module named 'torch' :说明安装未成功。请检查是否在正确的Python环境下运行,或尝试用 pip3 替代 pip
  • CUDA相关错误 :如果GPU检测失败,最常见的原因是PyTorch选择的CUDA版本与系统安装的NVIDIA驱动不兼容 。请根据 nvidia-smi 显示的驱动版本,去官网选择更低版本的CUDA(例如,驱动版本较老时,尝试选 CUDA 11.7CUDA 11.6)。
  • 安装速度慢/超时 :使用国内镜像源。例如,对于CPU版,可以使用命令:
    pip3 install torch torchvision torchaudio --index-url https://mirrors.aliyun.com/pypi/simple/

💎 总结与建议

  • 首选官网:这是避免版本混乱的最佳实践。
  • GPU是可选但重要的:有NVIDIA显卡且想训练模型,务必花时间配置好CUDA。
  • 从简单开始 :如果安装GPU版遇到困难,先安装CPU版,确保PyTorch基础功能可用,后续再解决CUDA问题。

python mnist 如何应用?

在PyTorch中应用MNIST数据集是深度学习入门的经典实践。下面我为你梳理一个从数据加载到模型训练评估的完整流程,并提供代码示例和优化思路。

🛠️ 核心步骤与代码示例

整个流程可以分为数据准备、模型构建、训练和评估几个核心步骤。这里是一个基于卷积神经网络(CNN) 的完整示例:

python 复制代码
import torch
import torch.nn as nn
import torch.nn.functional as F
import torch.optim as optim
from torchvision import datasets, transforms
from torch.utils.data import DataLoader

# 1. 数据准备:加载并预处理MNIST数据集
transform = transforms.Compose([
    transforms.ToTensor(),  # 将图像转为Tensor,并自动归一化像素值到[0,1]
    transforms.Normalize((0.1307,), (0.3081,))  # 使用MNIST的均值和标准差进行标准化
])

# 加载训练集和测试集
train_dataset = datasets.MNIST('./data', train=True, download=True, transform=transform)
test_dataset = datasets.MNIST('./data', train=False, transform=transform)

# 创建数据加载器,批次大小设为64
train_loader = DataLoader(train_dataset, batch_size=64, shuffle=True)
test_loader = DataLoader(test_dataset, batch_size=1000, shuffle=False)

# 2. 模型构建:定义一个简单的CNN网络
class Net(nn.Module):
    def __init__(self):
        super(Net, self).__init__()
        # 第一个卷积层:输入通道1(灰度图),输出通道32,卷积核3x3
        self.conv1 = nn.Conv2d(1, 32, 3, 1)
        # 第二个卷积层:输入通道32,输出通道64,卷积核3x3
        self.conv2 = nn.Conv2d(32, 64, 3, 1)
        # Dropout层,防止过拟合
        self.dropout1 = nn.Dropout2d(0.25)
        self.dropout2 = nn.Dropout(0.5)
        # 全连接层
        self.fc1 = nn.Linear(9216, 128)  # 9216是展平后的特征数量
        self.fc2 = nn.Linear(128, 10)    # 输出10个类别(数字0-9)

    def forward(self, x):
        # 卷积 -> ReLU激活 -> 最大池化
        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)
        # 输出未归一化的logits(后续配合CrossEntropyLoss使用)
        return x

# 创建模型实例、选择损失函数和优化器
device = torch.device("cuda" if torch.cuda.is_available() else "cpu")
model = Net().to(device)
optimizer = optim.Adam(model.parameters(), lr=0.001)
criterion = nn.CrossEntropyLoss()

# 3. 训练模型
def train(model, device, train_loader, optimizer, criterion, 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 = criterion(output, target)  # 计算损失
        loss.backward()        # 反向传播
        optimizer.step()       # 更新参数
        if batch_idx % 100 == 0:
            print(f'Train Epoch: {epoch} [{batch_idx * len(data)}/{len(train_loader.dataset)} '
                  f'({100. * batch_idx / len(train_loader):.0f}%)]\tLoss: {loss.item():.6f}')

# 4. 评估模型
def test(model, device, test_loader, criterion):
    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 += criterion(output, target).item()  # 累加损失
            pred = output.argmax(dim=1, keepdim=True)  # 获取预测结果
            correct += pred.eq(target.view_as(pred)).sum().item()

    test_loss /= len(test_loader.dataset)
    accuracy = 100. * correct / len(test_loader.dataset)
    print(f'\nTest set: Average loss: {test_loss:.4f}, '
          f'Accuracy: {correct}/{len(test_loader.dataset)} ({accuracy:.2f}%)\n')
    return accuracy

# 执行训练和评估
epochs = 5
best_accuracy = 0
for epoch in range(1, epochs + 1):
    train(model, device, train_loader, optimizer, criterion, epoch)
    accuracy = test(model, device, test_loader, criterion)
    if accuracy > best_accuracy:
        best_accuracy = accuracy
        # 可选:保存最佳模型
        torch.save(model.state_dict(), 'mnist_cnn_best.pth')

💡 关键点解析与优化建议

  • 数据预处理ToTensor()会自动将图像像素值(0-255)缩放到[0,1],并转换维度为[C, H, W]。标准化能加速模型收敛并提升稳定性。
  • 模型选择 :对于MNIST这类简单图像,CNN比全连接网络效果更好,因为它能有效捕捉空间特征。上述模型在5个epoch后通常能达到99%以上的测试准确率。
  • 训练技巧
    • 学习率调整 :可以尝试optim.lr_scheduler.StepLR在固定epoch后降低学习率。
    • 早停机制:当验证集准确率不再提升时提前终止训练,防止过拟合。
    • 数据增强:对于MNIST,可尝试轻微的旋转或平移(但需谨慎,避免改变标签语义)。

🚀 如何进一步提升与拓展

掌握了基础流程后,你可以从以下几个方向深化:

  1. 模型调优:尝试更复杂的网络(如ResNet)、调整超参数(学习率、批次大小、Dropout比例)。
  2. 可视化理解 :使用torchvision.utils.make_grid可视化训练数据;用matplotlib绘制训练/测试的损失和准确率曲线。
  3. 错误分析 :查看混淆矩阵,分析模型容易混淆哪些数字(如4和9、3和8),并针对性地改进。
  4. 扩展到其他数据集 :将这套流程应用到Fashion-MNISTCIFAR-10等更复杂的数据集上。

相关推荐
YJlio17 小时前
Registry Usage (RU) 学习笔记(15.5):注册表内存占用体检与 Hive 体量分析
服务器·windows·笔记·python·学习·tcp/ip·django
奔波霸的伶俐虫17 小时前
redisTemplate.opsForList()里面方法怎么用
java·开发语言·数据库·python·sql
longze_717 小时前
生成式UI与未来AI交互变革
人工智能·python·ai·ai编程·cursor·蓝湖
weixin_4380774917 小时前
CS336 Assignment 4 (data): Filtering Language Modeling Data 翻译和实现
人工智能·python·语言模型·自然语言处理
小郭团队17 小时前
未来PLC会消失吗?会被嵌入式系统取代吗?
c语言·人工智能·python·嵌入式硬件·架构
yesyesido17 小时前
智能文件格式转换器:文本/Excel与CSV无缝互转的在线工具
开发语言·python·excel
王夏奇17 小时前
python在汽车电子行业中的应用1-基础知识概念
开发语言·python·汽车
子夜江寒17 小时前
基于PyTorch的CBOW模型实现与词向量生成
pytorch·python
He_Donglin17 小时前
Python图书爬虫
开发语言·爬虫·python