centos

CentOS下PyTorch如何进行深度学习

小樊
49
2025-03-17 22:21:45
栏目: 智能运维

在CentOS系统下使用PyTorch进行深度学习,通常需要以下几个步骤:

安装PyTorch

使用Anaconda安装

  1. 安装Anaconda: 访问Anaconda官方下载页面,下载适合CentOS系统的Anaconda3安装包,并按照提示完成安装。

  2. 创建并激活虚拟环境

    conda create -n pytorch python=3.8
    conda activate pytorch
    
  3. 安装PyTorch: 在激活的虚拟环境中,使用conda安装PyTorch。如果需要GPU支持,确保已安装相应版本的CUDA和cuDNN,并选择支持GPU的版本:

    conda install pytorch torchvision torchaudio cudatoolkit=11.8 -c pytorch
    
  4. 验证安装: 启动Python交互式环境,输入以下命令验证PyTorch是否安装成功:

    import torch
    print(torch.__version__)
    print(torch.cuda.is_available())
    

使用pip安装

  1. 安装pip(如果尚未安装):

    sudo yum install python3-pip
    
  2. 安装PyTorch: 使用pip安装PyTorch,可以通过指定清华大学的镜像源来加速下载速度:

    pip install torch torchvision torchaudio -f https://pypi.tuna.tsinghua.edu.cn/simple
    
  3. 验证安装

    import torch
    print(torch.__version__)
    print(torch.cuda.is_available())
    

进行深度学习

  1. 导入必要的库

    import torch
    import torch.nn as nn
    import torch.optim as optim
    from torchvision import datasets, transforms
    
  2. 定义模型结构

    class SimpleCNN(nn.Module):
        def __init__(self):
            super(SimpleCNN, self).__init__()
            self.conv1 = nn.Conv2d(1, 32, kernel_size=3, stride=1, padding=1)
            self.fc1 = nn.Linear(32 * 28 * 28, 10)
    
        def forward(self, x):
            x = F.relu(self.conv1(x))
            x = x.view(-1, 32 * 28 * 28)
            x = self.fc1(x)
            return x
    
  3. 准备数据

    transform = transforms.Compose([transforms.ToTensor(), transforms.Normalize((0.5,), (0.5,))])
    train_dataset = datasets.MNIST(root='./data', train=True, download=True, transform=transform)
    train_loader = torch.utils.data.DataLoader(train_dataset, batch_size=64, shuffle=True)
    
  4. 初始化模型、损失函数和优化器

    model = SimpleCNN()
    criterion = nn.CrossEntropyLoss()
    optimizer = optim.SGD(model.parameters(), lr=0.01, momentum=0.9)
    
  5. 训练模型

    num_epochs = 10
    for epoch in range(num_epochs):
        for i, (images, labels) in enumerate(train_loader):
            # 前向传播
            outputs = model(images)
            loss = criterion(outputs, labels)
    
            # 反向传播和优化
            optimizer.zero_grad()
            loss.backward()
            optimizer.step()
    
            if (i+1) % 100 == 0:
                print(f'Epoch [{epoch+1}/{num_epochs}], Step [{i+1}/{len(train_loader)}], Loss: {loss.item():.4f}')
    
  6. 模型评估

    model.eval()  # 切换到评估模式
    with torch.no_grad():  # 不计算梯度
        correct = 0
        total = 0
        for data, labels in test_loader:
            outputs = model(data.view(-1, 784))
            _, predicted = torch.max(outputs.data, 1)
            total += labels.size(0)
            correct += (predicted == labels).sum().item()
    
        print(f'Accuracy of the network on the 10000 test images: {100 * correct / total}%')
    

0
看了该问题的人还看了