Pytorch to(device)用法
阿新 • • 發佈:2020-01-08
如下所示:
device = torch.device("cuda:0" if torch.cuda.is_available() else "cpu") model.to(device)
這兩行程式碼放在讀取資料之前。
mytensor = my_tensor.to(device)
這行程式碼的意思是將所有最開始讀取資料時的tensor變數copy一份到device所指定的GPU上去,之後的運算都在GPU上進行。
這句話需要寫的次數等於需要儲存GPU上的tensor變數的個數;一般情況下這些tensor變數都是最開始讀資料時的tensor變數,後面衍生的變數自然也都在GPU上
如果是多個GPU
在程式碼中的使用方法為:
device = torch.device("cuda:0" if torch.cuda.is_available() else "cpu") model = Model() if torch.cuda.device_count() > 1: model = nn.DataParallel(model,device_ids=[0,1,2]) model.to(device)
Tensor總結
(1)Tensor 和 Numpy都是矩陣,區別是前者可以在GPU上執行,後者只能在CPU上;
(2)Tensor和Numpy互相轉化很方便,型別也比較相容
(3)Tensor可以直接通過print顯示資料型別,而Numpy不可以
把Tensor放到GPU上執行
if torch.cuda.is_available(): h = g.cuda() print(h)
torch.nn.functional Convolution函式 torch.nn.functional.vonv1d(input,weight,bias=None,stride=1,padding=0,dilation=1,groups=1) torch.nn.functional.conv2d(input,group=1) parameter: input --輸入張量(minibatch * in_channels * iH * iW)-weights-– 過濾器張量 (out_channels,in_channels/groups,kH,kW) - bias – 可選偏置張量 (out_channels) - stride – 卷積核的步長,可以是單個數字或一個元組 (sh x sw)。預設為1 - padding – 輸入上隱含零填充。可以是單個數字或元組。 預設值:0 - groups – 將輸入分成組,in_channels應該被組數除盡 >>> # With square kernels and equal stride >>> filters = autograd.Variable(torch.randn(8,4,3,3)) >>> inputs = autograd.Variable(torch.randn(1,5,5)) >>> F.conv2d(inputs,filters,padding=1)
Pytorch中使用指定的GPU
(1)直接終端中設定
CUDA_VISIBLE_DEVICES=1
(2)python程式碼中設定:
import os os.environ['CUDA_VISIBLE_DEVICE']='1'
(3)使用函式set_device
import torch torch.cuda.set_device(id) Pytoch中的in-place
in-place operation 在 pytorch中是指改變一個tensor的值的時候,不經過複製操作,而是在運來的記憶體上改變它的值。可以把它稱為原地操作符。
在pytorch中經常加字尾 “_” 來代表原地in-place operation,比如 .add_() 或者.scatter()
python 中裡面的 += *= 也是in-place operation。
下面是正常的加操作,執行結束加操作之後x的值沒有發生變化:
import torch x=torch.rand(2) #tensor([0.8284,0.5539]) print(x) y=torch.rand(2) print(x+y) #tensor([1.0250,0.7891]) print(x) #tensor([0.8284,0.5539])
下面是原地操作,執行之後改變了原來變數的值:
import torch x=torch.rand(2) #tensor([0.8284,0.5539]) print(x) y=torch.rand(2) x.add_(y) print(x) #tensor([1.1610,1.3789])
以上這篇Pytorch to(device)用法就是小編分享給大家的全部內容了,希望能給大家一個參考,也希望大家多多支援我們。