Pytorch中實現CPU和GPU之間的切換的兩種方法
如何在pytorch中指定CPU和GPU進行訓練,以及cpu和gpu之間切換
由CPU切換到GPU,要修改的幾個地方:
網絡模型、損失函數、數據(輸入,標注)
# 創(chuàng)建網絡模型 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") # 網絡模型創(chuàng)建 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、代碼
# 創(chuàng)建模型 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,這些服務器由每周免費八個小時的使用時間,可供我們基本的需求。
到此這篇關于Pytorch中實現CPU和GPU之間的切換的兩種方法的文章就介紹到這了,更多相關Pytorch CPU和GPU切換內容請搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關文章希望大家以后多多支持腳本之家!
相關文章
Pycharm搭建Django項目詳細教程(看完這一篇就夠了)
這篇文章主要給大家介紹了關于Pycharm搭建Django項目的詳細教程,想要學習的小伙伴看完這一篇就夠了,pycharm是一種Python?IDE,帶有一整套可以幫助用戶在使用Python語言開發(fā)時提高其效率的工具,需要的朋友可以參考下2023-11-11python GUI庫圖形界面開發(fā)之PyQt5時間控件QTimer詳細使用方法與實例
這篇文章主要介紹了python GUI庫圖形界面開發(fā)之PyQt5時間控件QTimer詳細使用方法與實例,需要的朋友可以參考下2020-02-02Python的Flask框架中@app.route的用法教程
這篇文章主要介紹了Python的Flask框架中@app.route的用法教程,包括相關的正則表達式講解,是Flask學習過程當中的基礎知識,需要的朋友可以參考下2015-03-03在Heroku云平臺上部署Python的Django框架的教程
這篇文章主要介紹了在Heroku云平臺上部署Python的Django框架的教程,Heroku云平臺使用了Git版本控制系統(tǒng),所以本教程主要提供了配置所需要的Git腳本,需要的朋友可以參考下2015-04-04