当前位置:   article > 正文

Pytorch中实现CPU和GPU之间的切换_torch.device('cuda')

torch.device('cuda')

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

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

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

  1. # 创建网络模型
  2. tudui = Tudui()
  3. if torch.cuda.is_available():
  4. tudui = tudui.cuda()
  5. # 损失函数
  6. loss_fn = nn.CrossEntropyLoss()
  7. if torch.cuda.is_available():
  8. loss_fn = loss_fn.cuda()
  9. # 数据输入 包括训练和测试的代码,二者都需要添加此代码
  10. if torch.cuda.is_available():
  11. imgs = imgs.cuda()
  12. targets = targets.cuda()

方法一:.to(device)

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

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

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

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

2.指定GPU

  1. # 定义训练的设备
  2. device = torch.device("cuda:0")
  3. # 网络模型创建
  4. tudui = Tudui()
  5. tudui = tudui.to(device)
  6. # 损失函数
  7. loss_fn = nn.CrossEntropyLoss()
  8. loss_fn = loss_fn.to(device)
  9. # 训练步骤开始
  10. tudui.train()
  11. for data in train_dataloader:
  12. imgs, targets=data
  13. imgs = imgs.to(device)
  14. targets = targets.to(device)
  15. outputs = tudui(imgs)
  16. loss = loss_fn(outputs, targets)
  17. # 测试步骤开始
  18. tudui.eval()
  19. total_test_loss = 0
  20. total_accuracy = 0
  21. with torch.no_grad():
  22. for data in test_dataloader:
  23. imgs, targets=data
  24. imgs = imgs.to(device)
  25. targets = targets.to(device)
  26. outputs = tudui(imgs)
  27. loss = loss_fn(outputs, targets)
  28. total_test_loss = total_test_loss + loss.item()
  29. accuracy = (outputs.argmax(1)==targets).sum()
  30. total_accuracy = total_accuracy + accuracy

3.指定cpu时:

device = torch.device('cpu')

方法二:

1、需要修改的

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

2、代码

  1. # 创建模型
  2. tudui = Tudui()
  3. if torch.cuda.is_available():
  4. tudui = tudui.cuda()
  5. # 损失函数
  6. loss_fn = nn.CrossEntropyLoss()
  7. if torch.cuda.is_available():
  8. loss_fn = loss_fn.cuda()
  9. # 训练步骤开始
  10. tudui.train()
  11. for data in train_dataloader:
  12. imgs, targets=data
  13. if torch.cuda.is_available():
  14. imgs = imgs.cuda()
  15. targets = targets.cuda()
  16. outputs = tudui(imgs)
  17. loss = loss_fn(outputs, targets)
  18. # 测试步骤开始
  19. tudui.eval()
  20. total_test_loss = 0
  21. total_accuracy = 0
  22. with torch.no_grad():
  23. for data in test_dataloader:
  24. imgs, targets=data
  25. if torch.cuda.is_available():
  26. imgs = imgs.cuda()
  27. targets = targets.cuda()
  28. outputs = tudui(imgs)
  29. loss = loss_fn(outputs, targets)
  30. total_test_loss = total_test_loss + loss.item()
  31. accuracy = (outputs.argmax(1)==targets).sum()
  32. total_accuracy = total_accuracy + accuracy

总结:

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

声明:本文内容由网友自发贡献,不代表【wpsshop博客】立场,版权归原作者所有,本站不承担相应法律责任。如您发现有侵权的内容,请联系我们。转载请注明出处:https://www.wpsshop.cn/w/空白诗007/article/detail/851449
推荐阅读
相关标签
  

闽ICP备14008679号