丹摩 | 基于PyTorch的CIFAR-10图像分类实现


从创建实例开始的新项目流程

第一步:创建实例

  1. 登录 DAMODEL 平台。
  2. 创建一个 GPU 实例:
    • GPU 配置 :选择 NVIDIA H800 或其他可用高性能 GPU。

    • 系统配置:推荐使用 Ubuntu 20.04,内存 16GB,硬盘 50GB。

    • 启动实例后,获取实例的 IP 地址。

    • 选择镜像


第二步:连接实例

  1. 登录成功后,你会进入实例的终端界面。


第三步:更新系统和安装基础工具

  1. 更新系统:

    bash 复制代码
    sudo apt update && sudo apt upgrade -y
  2. 安装 Python 和基础工具:

    bash 复制代码
    sudo apt install python3 python3-pip git -y
  3. (可选)安装文本编辑器:

    bash 复制代码
    sudo apt install vim nano -y

第四步:创建项目目录并配置环境

  1. 创建项目目录:

    bash 复制代码
    mkdir ~/workspace/cifar10_project
    cd ~/workspace/cifar10_project
  2. 创建并激活虚拟环境:

    bash 复制代码
    python3 -m venv venv
    source venv/bin/activate

    前面出现venu则表示已经激活虚拟环境了

  3. 安装必要的 Python 包:

    bash 复制代码
    pip install torch torchvision matplotlib

第五步:下载数据并初始化项目代码

  1. 创建 Python 脚本:

    bash 复制代码
    vim train_cifar10.py
  2. 在文件中输入以下代码,加载 CIFAR-10 数据集并定义简单模型:

    python 复制代码
    import torch
    import torchvision
    import torchvision.transforms as transforms
    import torch.nn as nn
    import torch.optim as optim
    
    # 数据预处理
    transform = transforms.Compose([
        transforms.ToTensor(),
        transforms.Normalize((0.5, 0.5, 0.5), (0.5, 0.5, 0.5))
    ])
    
    # 加载 CIFAR-10 数据集
    trainset = torchvision.datasets.CIFAR10(
        root='./data', train=True, download=True, transform=transform)
    trainloader = torch.utils.data.DataLoader(trainset, batch_size=64, shuffle=True)
    
    testset = torchvision.datasets.CIFAR10(
        root='./data', train=False, download=True, transform=transform)
    testloader = torch.utils.data.DataLoader(testset, batch_size=64, shuffle=False)
    
    # 定义简单卷积神经网络
    class SimpleCNN(nn.Module):
        def __init__(self):
            super(SimpleCNN, self).__init__()
            self.conv1 = nn.Conv2d(3, 32, 3, padding=1)
            self.pool = nn.MaxPool2d(2, 2)
            self.fc1 = nn.Linear(32 * 16 * 16, 10)
    
        def forward(self, x):
            x = self.pool(torch.relu(self.conv1(x)))
            x = x.view(-1, 32 * 16 * 16)
            x = self.fc1(x)
            return x
    
    # 初始化模型、损失函数和优化器
    net = SimpleCNN()
    criterion = nn.CrossEntropyLoss()
    optimizer = optim.SGD(net.parameters(), lr=0.001, momentum=0.9)
    
    # 模型训练
    for epoch in range(5):  # 训练 5 个周期
        running_loss = 0.0
        for inputs, labels in trainloader:
            optimizer.zero_grad()
            outputs = net(inputs)
            loss = criterion(outputs, labels)
            loss.backward()
            optimizer.step()
            running_loss += loss.item()
        print(f"Epoch {epoch+1}, Loss: {running_loss / len(trainloader)}")
    
    print("Finished Training")
  3. 保存并退出(按下 Esc,然后输入 :wq)。


第六步:运行训练脚本

运行脚本进行模型训练:

bash 复制代码
python train_cifar10.py
  • 脚本会下载 CIFAR-10 数据集并训练模型。
  • 训练完成后会输出每个 epoch 的损失值。

第七步:保存和测试模型

  1. 保存模型:在脚本末尾添加代码以保存训练好的模型:

    python 复制代码
    torch.save(net.state_dict(), "cifar10_model.pth")
    print("Model saved as cifar10_model.pth")
  2. 重新运行脚本以保存模型:

    bash 复制代码
    python train_cifar10.py
  3. 检查是否生成了 cifar10_model.pth 文件:

    bash 复制代码
    ls
  4. 测试模型(可选):加载保存的模型并在测试集上评估准确率:

    python 复制代码
    net.load_state_dict(torch.load("cifar10_model.pth"))
    net.eval()
    correct = 0
    total = 0
    with torch.no_grad():
        for inputs, labels in testloader:
            outputs = net(inputs)
            _, predicted = torch.max(outputs, 1)
            total += labels.size(0)
            correct += (predicted == labels).sum().item()
    
    print(f"Accuracy on test dataset: {100 * correct / total}%")

第八步:清理和扩展

  1. 扩展功能

    • 使用更复杂的模型(如 ResNet)。
    • 尝试使用 Adam 优化器提高性能。
    • 可视化训练过程或模型预测结果。
  2. 清理资源

    • 如果完成训练并不再需要 GPU 计算,记得停止或删除实例以节省费用。

\

相关推荐
sitellla4 分钟前
LocalAI:本地运行多模态 AI,它全包了
人工智能·其他
明哥聊AI7 分钟前
2026 AI Agent开发完全指南:从MCP协议到多Agent协作系统
人工智能
qiten_0078 分钟前
Selective PEFT:BitFit方法深度解析与实践
人工智能·深度学习
秋名山码民9 分钟前
拙见科技(陕西)——动态本体驱动的 超图Agentic RAG:拙见AI 面向 AI营销的企业认知系统
人工智能·科技
民乐团扒谱机11 分钟前
【微实验】从迷雾中看清世界:卡尔曼滤波的数学诗意与MATLAB实践
人工智能·算法·matlab·卡尔曼滤波·kalman
2zcode11 分钟前
基于MATLAB图像处理的细胞检测与计数分析系统设计与实现
图像处理·人工智能·matlab
字节跳动视频云技术团队20 分钟前
进球、切片、全网爆:如何打造一座跑赢热搜的赛事“AI短视频工厂”?
人工智能·音视频开发·直播
格林威23 分钟前
网口相机 vs USB相机:区别与适用场景(选型不再纠结)
人工智能·数码相机·机器学习·计算机视觉·视觉检测·机器视觉·工业相机
HackTwoHub30 分钟前
某单位 CMS 完整渗透链、SQL 注入→后台拿权→绕过宝塔 Waf 上线 shell
数据库·人工智能·sql·安全·网络安全·系统安全·安全架构
字节跳动视频云技术团队33 分钟前
拒绝被剧透!解密大型赛事直播背后的超低延迟黑科技
人工智能·音视频开发·直播