神经网络 torch----使用GPU(cuda)

在训练过程中,要想利用我们的GPU,有两个基本要求。这些要求如下:
1、数据必须移到GPU上
2、网络必须移到GPU上。

默认情况下,在创建 PyTorch 张量或 PyTorch 神经网络模块时,会在 CPU 上初始化相应的数据。具体来说,这些数据存在于 CPU 的内存中。

如何用GPU训练神经网络模型

具体修改的位置包括下面3个地方:

  • 网络模型
  • 数据(输入、标注)
  • 损失函数
import torch
import torchvision
from torch import nn
from torch.utils.data import DataLoader
from torch.utils.tensorboard import SummaryWriter
import time
 
 
train_data = torchvision.datasets.CIFAR10(root='./dataset', train=True, transform=torchvision.transforms.ToTensor(),
                                       download=True)
test_data = torchvision.datasets.CIFAR10(root='./dataset', train=False, transform=torchvision.transforms.ToTensor(),
                                       download=True)
 
train_data_size = len(train_data)
test_data_size = len(test_data)
# print("Train data size: ", train_data_size)
print('Train data size: {}'.format(train_data_size))
print('Test data size: {}'.format(test_data_size))
 
# 利用DataLoader 来加载数据集
train_dataloader = DataLoader(train_data, batch_size=64, shuffle=True)
test_dataloader = DataLoader(test_data, batch_size=64, shuffle=True)
 
# 搭建nn
class Tuduix(nn.Module):
    def __init__(self):
        super(Tuduix, self).__init__()
        self.module = nn.Sequential(
            nn.Conv2d(3, 32, 5, stride=1, padding=2),
            nn.MaxPool2d(2),
            nn.Conv2d(32, 32, 5, stride=1, padding=2),
            nn.MaxPool2d(2),
            nn.Conv2d(32, 64, 5, stride=1, padding=2),
            nn.MaxPool2d(2),
            nn.Flatten(),
            nn.Linear(64 * 4 * 4, 64),
            nn.Linear(64, 10)
        )
 
    def forward(self, x):
        y = self.module(x)
        return y
    
#创建网络模型
tudui = Tuduix()
if torch.cuda.is_available():
    tudui = tudui.cuda()
 
# 损失函数
loss_fn = nn.CrossEntropyLoss()
if torch.cuda.is_available():
    loss_fn = loss_fn.cuda()
 
# 优化器
learning_rate = 1e-2
optimizer = torch.optim.SGD(tudui.parameters(), lr=learning_rate)
 
# 设置训练网络的一些参数
# 记录训练的次数
total_train_step = 0
# 记录测试的次数
total_test_step = 0
# 训练的轮数
epoch = 10
 
# 添加tensorboard
writer = SummaryWriter('./logs')
 
# 计时
start_time = time.time()
 
for i in range(epoch):
    print('------------第{}轮训练-----------------'.format(i+1))
 
    # 训练步骤开始
    tudui.train()
    for data in train_dataloader:
        imgs, labels = data
        if torch.cuda.is_available():
            imgs, labels = imgs.cuda(), labels.cuda()
        outputs = tudui(imgs)
        loss = loss_fn(outputs, labels)
 
        # 优化器优化模型
        optimizer.zero_grad()
        loss.backward()
        optimizer.step()
 
        total_train_step += 1
        if total_train_step % 100 == 0:
            end_time = time.time()
            print(end_time - start_time)
            print('训练次数:{},Loss={}'.format(total_train_step, loss.item()))
            writer.add_scalar('train_loss', loss.item(), total_train_step)
 
    # 测试步骤开始
    tudui.eval()
    total_test_loss = 0
    total_accuracy = 0
    with torch.no_grad():
        for data in test_dataloader:
            imgs, labels = data
            if torch.cuda.is_available():
                imgs, labels = imgs.cuda(), labels.cuda()
            outputs = tudui(imgs)
            loss = loss_fn(outputs, labels)
            total_test_loss = total_test_loss + loss.item()
            accuracy = (outputs.argmax(1) == labels).sum()
            total_accuracy = total_accuracy + accuracy.item()
    print('整体测试集上的Loss:{}'.format(total_test_loss))
    print('整体测试集上的正确率:{}'.format(total_accuracy/test_data_size))
    writer.add_scalar('test_loss', total_test_loss, total_test_step)
    writer.add_scalar('test_accuracy', total_accuracy/test_data_size, total_test_step)
    total_test_step = total_test_step + 1
 
    torch.save(tudui, 'tuduix_gpu1{}.pth'.format(i))
    print('model has been saved.')
 
writer.close()

  • 8
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
### 回答1: Torch是一种用于机器学习和深度学习的工具。然而,有时候在使用Torch时可能会遇到一些问题,例如无法使用GPU进行计算。解决这个问题的方法是通过命令行参数添加“--skip-torch-cuda-test”。 这个问题的原因通常是因为在使用Torch之前未正确配置CUDA库。当Torch尝试使用GPU时,它会尝试运行一些GPU测试,以确保CUDA库已正确安装。如果测试失败,Torch将无法使用GPU。 添加“--skip-torch-cuda-test”命令行参数可以绕过这个测试,从而让Torch能够在没有GPU支持的情况下正常工作。但是,这样做并不是最终的解决方案,因为在使用基于深度学习的应用程序时,GPU通常可以提高计算速度和效率。 因此,为了最大化Torch的性能,最好是解决CUDA库的配置问题,并为Torch启用GPU支持。这样可以让我们利用GPU的并行计算优势来加速训练和预测过程。 ### 回答2: 首先,Torch是一种开源的机器学习框架,它提供了很多优秀的工具包和算法,支持用户进行高效的深度学习,计算机视觉,自然语言处理等应用。与此同时,Torch还支持在GPU上运算,以加速训练模型的速度。不过,在安装Torch时,有时候会出现无法使用GPU的问题。 这个问题可能与本地GPU的驱动程序或Cuda版本不兼容有关,也可能是用户在配置时出现了错误。如果你确保本地GPUCuda安装正确,并且仍然无法使用GPU,则可以尝试在命令行中添加--skip-torch-cuda-test参数来跳过CUDA测试阶段,以尝试解决问题。 这个参数的意义是在启动Torch时跳过CUDA的兼容性测试,因为在测试期间可能会出现错误,导致Torch无法使用GPU。通过添加该参数,可以让Torch忽略这些错误,并以CPU模式启动,用于排除其他错误。 但是,值得注意的是,这个参数并不是一个理想的解决方案,因为它无法真正解决无法使用GPU的根本原因。如果您想在Torch中成功地使用GPU,您应该在CUDA安装和配置时小心,确保所有依赖项和兼容性问题得到解决。同时,使用最新版本的TorchCUDA也可能会减少可能出现的错误,从而提高使用GPU的成功率。 ### 回答3: Torch是一种流行的机器学习框架,它允许您构建和训练神经网络模型。GPU是一种高性能的处理器,可以用来训练深度神经网络模型。然而,有时候在使用Torch时,我们可能会遇到一个问题:Torch不能使用GPU。 这个问题的原因可能是你的电脑上没有安装CUDA工具包。CUDA是一种由NVIDIA开发的并行计算平台和编程模型,允许您在GPU上进行并行计算。因此,如果您想要在Torch使用GPU进行模型训练,您需要先安装CUDA工具包。 如果您已经安装了CUDA工具包,但在Torch中仍无法使用GPU,您可以尝试使用命令行选项“--skip-torch-cuda-test”。这个选项可以让Torch绕过对CUDA的测试,从而强制使用CPU进行模型训练。 但是需要注意的是,如果您硬件支持GPU加速,建议不要使用这个选项。因为使用GPU可以大大缩短模型训练所需的时间,提高模型的训练效率和准确率。如果您确实需要使用CPU进行训练,您可以考虑使用更轻量级的模型或者减小训练数据的规模,以减少训练时间。 总之,要在Torch使用GPU,您需要先安装CUDA工具包,并确保您的硬件支持GPU加速。如果出现问题,您可以尝试使用选项“--skip-torch-cuda-test”,但不建议这样做。最好的做法是解决问题,让Torch能够正确地使用GPU
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值