温馨提示×

Ubuntu下如何利用PyTorch进行深度学习

小樊
54
2025-08-11 22:16:04
栏目: 智能运维

在Ubuntu下利用PyTorch进行深度学习,可按以下步骤操作:

1. 环境准备

  • 安装系统依赖:更新包列表并安装基础工具,如build-essentialpython3pip等。
    sudo apt update  
    sudo apt install python3 python3-pip build-essential  
    
  • 创建虚拟环境(可选):隔离项目依赖,推荐使用venvconda
    python3 -m venv pytorch_env  # venv方式  
    source pytorch_env/bin/activate  
    
    或使用conda
    conda create -n pytorch_env python=3.9  
    conda activate pytorch_env  
    

2. 安装PyTorch

  • CPU版本(无GPU加速)
    pip install torch torchvision torchaudio  # pip方式  
    # 或  
    conda install pytorch torchvision torchaudio cpuonly -c pytorch  # conda方式  
    
  • GPU版本(需NVIDIA显卡)
    1. 安装CUDA Toolkit和cuDNN(需匹配显卡驱动版本,可从NVIDIA官网下载)。
    2. 安装带CUDA的PyTorch:
      pip install torch torchvision torchaudio --extra-index-url https://download.pytorch.org/whl/cu117  # 以CUDA 11.7为例  
      # 或  
      conda install pytorch torchvision torchaudio cudatoolkit=11.7 -c pytorch  # conda方式  
      
  • 验证安装:在Python中导入PyTorch并检查版本及CUDA是否可用。
    import torch  
    print(torch.__version__)  
    print(torch.cuda.is_available())  # 若为True则CUDA可用  
    

3. 开发深度学习模型

  • 数据准备:使用torchvision加载数据集(如CIFAR-10),并进行预处理(归一化、裁剪等)。
    import torchvision.transforms as transforms  
    transform = transforms.Compose([transforms.ToTensor(), transforms.Normalize((0.5,), (0.5,))])  
    trainset = torchvision.datasets.CIFAR10(root='./data', train=True, download=True, transform=transform)  
    trainloader = torch.utils.data.DataLoader(trainset, batch_size=4, shuffle=True)  
    
  • 构建模型:定义神经网络结构(如简单的卷积神经网络)。
    import torch.nn as nn  
    class Net(nn.Module):  
        def __init__(self):  
            super(Net, self).__init__()  
            self.conv1 = nn.Conv2d(3, 6, 5)  
            self.pool = nn.MaxPool2d(2, 2)  
            self.fc1 = nn.Linear(6 * 14 * 14, 120)  
            self.fc2 = nn.Linear(120, 84)  
            self.fc3 = nn.Linear(84, 10)  
        def forward(self, x):  
            x = self.pool(nn.functional.relu(self.conv1(x)))  
            x = self.fc1(x)  
            x = self.fc2(x)  
            x = self.fc3(x)  
            return x  
    net = Net()  
    
  • 训练模型:定义损失函数(如交叉熵损失)、优化器(如SGD),并执行训练循环。
    import torch.optim as optim  
    criterion = nn.CrossEntropyLoss()  
    optimizer = optim.SGD(net.parameters(), lr=0.001, momentum=0.9)  
    for epoch in range(2):  # 训练2轮  
        for i, data in enumerate(trainloader, 0):  
            inputs, labels = data  
            optimizer.zero_grad()  
            outputs = net(inputs)  
            loss = criterion(outputs, labels)  
            loss.backward()  
            optimizer.step()  
            if i % 2000 == 1999:  
                print(f'Epoch {epoch+1}, Batch {i+1}, Loss: {loss.item():.3f}')  
    

4. 高级操作(可选)

  • 使用GPU加速:将模型和数据移动到GPU设备。
    device = torch.device("cuda" if torch.cuda.is_available() else "cpu")  
    net.to(device)  
    inputs, labels = inputs.to(device), labels.to(device)  
    
  • 保存与加载模型
    # 保存模型  
    torch.save(net.state_dict(), 'model.pth')  
    # 加载模型  
    net.load_state_dict(torch.load('model.pth'))  
    

参考资料

安装及基础用法可参考PyTorch官网教程,具体项目可结合torchvisiontorch.nn等模块扩展。

0