日本免费高清视频-国产福利视频导航-黄色在线播放国产-天天操天天操天天操天天操|www.shdianci.com

學無先后,達者為師

網站首頁 編程語言 正文

Pytorch中實現CPU和GPU之間的切換的兩種方法_python

作者:三個刺客 ? 更新時間: 2023-03-22 編程語言

如何在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

欄目分類
最近更新