1. 程式人生 > >PyTorch動態神經網路(一)

PyTorch動態神經網路(一)

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