pytorch總結系列-基礎知識

  • Tensor張量類型
  • CPU and GPU
  • PyTorch and NumPy
  • Variables變量
  • Back Propagation

1.Pytorch的Tensor 數據類型有32 位浮點型 torch.FloatTensor 、 64 位浮點型 torch.DoubleTensor 、 16 位整型 torch.ShortTensor 、 32 位整型 torch.lntTensor 和 64 位整型 torch.LongTensor,默認的數據類型是 torch.FloatTensor.

例如:x = torch.FloatTensor([[1,2,3],[4,5,6]])

2.Pytorch的Tensor 可以運行在CPU和GPU上。torch.cuda.is available() 判斷一下是否支持 GPU,如果支持GPU,可以通過cuda()函數,把tensor加載到GPU上運行。

例如:gpu_tensor = torch.randn(1,10).cuda(0)       # 將tensor放到第一個GPU上

3.PyTorch和NumPy之間來回轉換:

        3.1.將numpy的ndarray轉換成torch.Tensor的兩種方式:

                        3.1.1 pytorch_tensor = torch.Tensor(numpy_tensor)

                        3.1.2 pytorch_tensor = torch.from_numpy(numpy_tensor)

        3.2將torch.Tensor轉換成numpy的ndarray

                         3.2.1 numpy_array = pytorch_tensor.numpy()   #在CPU上運行的pytorch_tensor

                         3.2.2 numpy_array = pytorch_tensor.cpu().numpy()   #在GPU上運行的pytorch_tensor,先要轉到CPU上運行

4.PyTorch Variables,將數據傳送到Pytorch構建的計算圖中,然後進行前向傳播,反向傳播,自動求導。包裝後的Variable有三個attribute:data,creater,grad。

例如:x = torch.randn(3)

            x = Variable(x,  requires_grad = True)      #   x的輸出:tensor([-0.4298, 1.0892, -0.4383], requires_grad=True)

            x.data  #結果爲:tensor([-0.4298, 1.0892, -0.4383])

            x.grad #結果爲:None

5.Back Propagation

5.1標量求導

backward() 函數,就是所謂的自動求導,等價於 backward(torch.FloatTensor([1] ) ) ,只不過對於標量求導裏面的參數就可以不寫了,直接通過函數就能對所有需要的梯度變量進行求導,得到它們的梯度。 x.grad 可以得到 x 的梯度。

5.2向量求導

向量求導需要在backward() 函數,加上參數,否則會報錯。求得梯度是每個分量相應的梯度的權重。

x = torch.randn(3)                                    #tensor([-1.7487, -0.1300, -1.6730])

x = Variable(x,  requires_grad = True)

y = x**2

y.backward(torch.Tensor([1.,1.,1.]))

print(x.grad)                                                 #tensor([-3.4975, -0.2600, -3.3459])

y.backward(torch.Tensor([1.,0.1,0.01]))   #tensor([-3.4974, -0.0260, -0.0335])

 

 

 

 

 

 

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章