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

作者:三个刺客 时间:2021-08-21 07:24:18 

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

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

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

# 创建网络模型
tudui = Tudui()
if torch.cuda.is_available():
  tudui = tudui.cuda()

# 损失函数
loss_fn = nn.CrossEntropyLoss()
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("cuda: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()

# 损失函数
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,这些服务器由每周免费八个小时的使用时间,可供我们基本的需求。

来源:https://blog.csdn.net/mxh3600/article/details/124460988

标签:Pytorch,CPU,GPU,切换
0
投稿

猜你喜欢

  • python统计字符串中指定字符出现次数的方法

    2022-11-17 11:37:46
  • Python 保持登录状态进行接口测试的方法示例

    2023-03-18 17:09:07
  • 关于python通过新建环境安装tfx的问题

    2022-06-28 19:47:21
  • python动态网站爬虫实战(requests+xpath+demjson+redis)

    2023-03-30 20:01:51
  • PHP之数组学习

    2024-05-02 17:35:43
  • JS+ASP实现无刷新新闻列表方法

    2007-08-22 12:44:00
  • VUE-ElementUI 时间区间选择器的使用

    2024-05-09 15:12:21
  • 浅谈MySQL排序原理与案例分析

    2024-01-15 23:08:21
  • Linux下MySQL多实例部署及安装指南

    2024-01-21 10:49:28
  • 如何用VScode配置Python开发环境

    2021-10-23 11:00:51
  • 详细介绍在pandas中创建category类型数据的几种方法

    2023-01-13 15:40:57
  • 详述如何提高MySQL中数据装载效率

    2009-10-26 10:27:00
  • Python 读取 .gz 文件全过程

    2021-11-02 16:01:04
  • Go 语言中 20 个占位符的整理

    2024-04-23 09:45:21
  • PyTorch搭建ANN实现时间序列风速预测

    2022-11-28 23:38:28
  • Python数据可视化实现正态分布(高斯分布)

    2022-10-28 03:31:29
  • python脚本框架webpy模板控制结构

    2023-07-08 23:45:34
  • python字符串的常用操作方法小结

    2023-11-29 03:01:37
  • PHP扩展Swoole实现实时异步任务队列示例

    2023-11-10 05:11:22
  • PyQt5+QtChart绘制散点图

    2023-02-27 01:50:43
  • asp之家 网络编程 m.aspxhome.com