PyTorch動態神經網路(一)
阿新 • • 發佈:2019-01-28
PyTorch是什麼?
它是一個基於Python的科學計算包,其主要是為了解決兩類場景:
1、一種是可以替代Numpy進行科學計算,同時還可以使用張量在GPU上進行加速運算。
2、一個深度學習的研究平臺,提供最大的靈活性和速度。
一、Tensors(張量)
Tensors形式是一個和Numpy的ndarrays很像的物件型別,但是效能上有其特殊之處就是可以利用張量在GPU上加速運算。
from __future__ import print_function
import torch
構建一個5*3的矩陣,未初始化的:
x = torch.Tensor(5,3)
print(x)
構建一個隨機初始化的矩陣:
x = torch.rand(5,3)
print (x)
獲得size:
print(x.size())
torch.Size是一個tuple,支援所有tuple操作。
二、操作
每種操作都有不同的語法,下面以加法為例解釋下:
(1)直接使用符號+
y = torch.rand(5,3)
print (x+y)
(2)使用torch.add()函式
print(torch.add(x,y))
(3) 在torch.add()中新增一個out引數,並建立一個Tensors物件來接收out的結果
result = torch.Tensor(5 ,3)
torch.add(x,y,out=result)
print(result)
(4) 這句中y.add_(x)會替換掉y,也就是:任何改變張量的操作方法都是以後綴 結尾的, eg : x.t (),並且替換x。
y.add_(x)
print(y)
關於Tensors的索引和ndarrary一樣:
print(x[:,1])
可以使用torch.view來改變tensors的size:
x = torch.rand(4,4)
y = x.view(16)
z = x.view(-1,8)
print(x.size(), y.size(), z.size())
三、NumPy Bridge
tensor和Numpy陣列間的相互轉化(兩者共享同一記憶體位置,所以一個改變,另一個也會跟著改變)
a = torch.ones(5)
print(a)
b = a.numpy() #tensors轉numpy陣列
print(b)
a.add_(1)
print(a)
print(b)
Numpy陣列轉為tensor
import numpy as np
a = np.ones(5)
b = torch.from_numpy(a)
np.add(a, 1, out=a) #
print(a)
print(b)
CUDA Tensors
可以使用.cuda方法將Tensors移動到GPU上。
if torch.cuda.is_available():
x = x.cuda()
y = y.cuda()
x+y