开发者

Pytorch中实现CPU和GPU之间的切换的两种方法

开发者 https://www.devze.com 2023-01-29 09:27 出处:网络 作者: 三个刺客
目录方法一:.to(device)1.不知道电脑GPU可不可用时:2.指定GPU时3.指定cpu时:方法二:总结:如何在pytorch中指定CPU和GPU进行训练,以及cpu和gpu之间切换
目录
  • 方法一:.to(device)
    • 1.不知道电脑GPU可不可用时:
    • 2.指定GPU时
    • 3.指定cpu时:
  • 方法二:
    • 总结:

      如何在pytorch中指定CPU和GPU进行训练,以及cpu和gpu之间切换

      由CPU切换到GPU,要修改的几个地方:

      网络模型、损失函数编程、数据(输入,标注)

      # 创建网络模型
      tudui = Tudui()
      if torch.cuda.is_available():
         tudui = tudui.cuda()
       
      # 损失函数
      loss_fn = nn.C开发者_Js入门rossEntropyLoss()
      if torch.cuda.is_available():
          loss_fn = loss_fn.cuda()
       
      # 数据输入   包括训练和测试的代码,二者都需要添加此代码
      if torch.cuda.is_available():
         imgs = imgs.cuda()
         targets = targets.cuda()
      

      方法一:.to(device)

      1.不知道电脑GPU可不可用时:

      device = torch.device('cuda' if torch.cuda.is_available() else 'cpu' )
      a.to(device)
      

      第一行代码的意思是判断电脑GPU可不可用,如果可用的话device就采用cuda()即调用GPU,不可用的话就采用cpu()即调用CPU。

      第二行代码的意思就是把变量放到对应的device上(当然如果你用的是CPU的话就不用这一步了,因为变量默认是存在CPU上的,调用GPU的话要先把变量放到GPU上跑,跑完之后再调回CPU上)

      2.指定GPU时

      # 定义训练的设备
      device = torch.device("candroiduda:0")
       
      # 网编程客栈络模型创建
      tudui = Tudui()
      tudui = tudui.to(device)
       
      # 损失函数
      loss_fn = nn.CrossEntropyLoss()
      loss_fn = loss_fn.to(device)
       
      # 训练步骤开始
          tudui.train()
          for data in train_dataloader:
              imgs, targets=data
              imgs = imgs.to(device)
              targets = targets.to(device)
              outputs = tudui(imgs)
              loss = loss_fn(outputs, targets)
       
      # 测试步骤开始
          tudui.eval()
          total_test_loss = 0
          total_accuracy = 0
          with torch.no_grad():
              for data in test_dataloader:
                  imgs, targets=data
                  imgs = imgs.to(device)
                  targets = targets.to(device)
                  outputs = tudui(imgs)
                  loss = loss_fn(outputs, targets)
                  total_test_loss = total_test_loss + loss.item()
                  accuracy = (outputs.argmax(1)==targets).sum()
                  total_accuracy = total_accuracy + accuracy

      3.指定cpu时:

      device = torch.device('cpu')
      

      方法二:

      1、需要修改的

      # 三种常见的写法
      device = torch.device('cuda')
      device = torch.device('cuda: 0')
      device = torch.device('cuda' if torch.cuda.is_available() else 'cpu')
      

      2、代码

      # 创建模型
      tudui = Tudui()
      if torch.cuda.is_available():
         tudui = tudui.cuda(www.devze.com)
       
      # 损失函数
      loss_fn = nn.CrossEntropyLoss()
      if torch.cuda.is_available():
          loss_fn = loss_fn.cuda()
       
      # 训练步骤开始
          tudui.train()
          for data in train_dataloader:
              imgs, targets=data
              if torch.cuda.is_available():
                  imgs = imgs.cuda()
                  targets = targets.cuda()
              outputs = tudui(imgs)
              loss = loss_fn(outputs, targets)
       
       # 测试步骤开始
          tudui.eval()
          total_test_loss = 0
          total_accuracy = 0
          with torch.no_grad():
              for data in test_dataloader:
                  imgs, targets=data
                  if torch.cuda.is_available():
                      imgs = imgs.cuda()
                      targets = targets.cuda()
                  outputs = tudui(imgs)
                  loss = loss_fn(outputs, targets)
                  total_test_loss = total_test_loss + loss.item()
                  accuracy = (outputs.argmax(1)==targets).sum()
                  total_accuracy = total_accuracy + accuracy

      总结:

      推荐方法一,如果自己电脑是只有CPU,可以推荐使用云端服务器,比如PaddlePaddle,Google colab,这些服务器由每周免费八个小时的使用时间,可供我们基本的需求。

      到此这篇关于Pytorch中实现CPU和GPU之间的切换的两种方法的文章就介绍到这了,更多相关Pytorch CPU和GPU切换内容请搜索我们以前的文章或继续浏览下面的相关文章android希望大家以后多多支持我们!

      0

      精彩评论

      暂无评论...
      验证码 换一张
      取 消

      关注公众号