- 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])