PyTorch快速入門

2021-09-21 14:49:22 字數 4801 閱讀 2115

詳細的pytorch教程可以去pytorch官網的學習指南進一步學習,下面主要對pytorch做簡單的介紹,能夠快速入門。

首先pytorch是基於python的科學計算類庫,主要有以下兩個方面的應用:

作為numpy的替代者,充分利用gpu的計算能力。

提供乙個靈活、快速的深度學習平台。

tensor 與numpy的n維陣列相似,另外還可以在gpu上使用張量來加速計算。

from __future__ import print_function

import torch

構建乙個5*3的未初始化的矩陣

x = torch.empty(5,

3)print

(x)

tensor([[2.7712e+35, 4.5886e-41, 7.2927e-04],

[3.0780e-41, 3.8725e+35, 4.5886e-41],

[4.4446e-17, 4.5886e-41, 3.9665e+35],

[4.5886e-41, 3.9648e+35, 4.5886e-41],

[3.8722e+35, 4.5886e-41, 4.4446e-17]])

構建乙個隨機初始化的矩陣:

x = torch.rand(5,

3)print

(x)

tensor([[ 0.4217, 0.2846, 0.9913],

[ 0.8746, 0.0236, 0.4789],

[ 0.5481, 0.6883, 0.8226],

[ 0.0092, 0.2270, 0.4415],

[ 0.1383, 0.0734, 0.1277]])

構建乙個元素型別為long且元素值為0的矩陣:

x = torch.zeros(5,

3,dtype=torch.

long

)print

(x)

tensor([[ 0, 0, 0],

[ 0, 0, 0],

[ 0, 0, 0],

[ 0, 0, 0],

[ 0, 0, 0]])

構建乙個直接載入資料的矩陣:

x = torch.tensor([[

3.3,12]

,[3,

5]])

print

(x)

tensor([[ 3.3000, 12.0000],

[ 3.0000, 5.0000]])

基於現有的tensor來建立乙個tensor。這個方法將復用源tensor的屬性(如:dtype等),除非知道提供乙個新的值

x = x.new_ones(5,

3,dtype=torch.double)

print

(x)​

x = torch.randn_like(x,dtype=torch.

float

)print

(x)

tensor([[ 1., 1., 1.],

[ 1., 1., 1.],

[ 1., 1., 1.],

[ 1., 1., 1.],

[ 1., 1., 1.]], dtype=torch.float64)

tensor([[-0.8084, 1.5661, -0.1017],

[ 3.1705, -0.7630, -2.3282],

[-1.3905, -0.0371, -0.4802],

[-0.4614, -0.1850, 0.0266],

[-0.0259, 2.7221, -0.8667]])

獲得size:

print

(x.size(

))

torch.size([5, 3])

提示

torch.size實際是tuple,它支援tuple所有的運算。

運算

有很多運算法則。在接下來的例子中,我們將瀏覽一下加法運算。

加法:語法1

y = torch.rand(5,

3)print

(x+y)

tensor([[ 1.5992, 0.1308, 0.9808],

[-0.3881, 1.5539, 2.3827],

[ 0.5378, 0.0299, 1.0226],

[-0.3838, 0.9908, 0.0008],

[ 1.4833, 0.8037, -0.5720]])

加法:語法2

print

(torch.add(x,y)

)

tensor([[ 1.5992, 0.1308, 0.9808],

[-0.3881, 1.5539, 2.3827],

[ 0.5378, 0.0299, 1.0226],

[-0.3838, 0.9908, 0.0008],

[ 1.4833, 0.8037, -0.5720]])

加法:作為輸出引數

result = torch.empty(5,

3)torch.add(x,y,out=result)

print

(result)

tensor([[ 1.5992, 0.1308, 0.9808],

[-0.3881, 1.5539, 2.3827],

[ 0.5378, 0.0299, 1.0226],

[-0.3838, 0.9908, 0.0008],

[ 1.4833, 0.8037, -0.5720]])

加法:內聯

y.add_(x)

print

(y)

tensor([ 0.3145, -0.4335, 1.6005, 1.6027, 1.0676, 0.5858, -0.6781, -0.0365, 1.2611, 1.2395, 1.3665, 1.1841, 3.5654, -0.2450,-0.2146, -0.4243])

a = y.size(

)print

(a)

torch.size([16])

提示任何改變張量的操作都是固定有「」。例如:x.copy(y),x.t_(),都會改變x的值。

你可以使用標準的類似numpy的行列索引。

print

(x[:,1

])

tensor([-0.2800, 1.1224, -0.4513, 0.8686, 0.1282])

變換大小:如果你想改變調整大小/改造張量,你可以使用 torch.view:

x = torch.randn(4,

4)y = x.view(16)

z = x.view(-1

,8)print

(x.size(

),y.size(

),z.size(

))

torch.size([4, 4]) torch.size([16]) torch.size([2, 8])
tensor有包括 轉置、索引、切片、數學操作、線性代數、隨機數等100多種運算,具體詳見torch

x = torch.randn(1)

print

(x)print

(x.item(

))

tensor([ 0.8017])

0.8016660213470459

numpy bridge

將torch tensor 轉換成numpy 陣列,反之亦然。 torch tensor和numpy 陣列是共享記憶體,修改其中乙個的值,那麼另外乙個的值也會改變。

將tensor轉換成 numpy array

a = torch.ones(5)

print

(a)

tensor([ 1., 1., 1., 1., 1.])

b= a.numpy(

)print

(b)

[ 1. 1. 1. 1. 1.]

觀察numpy array的值會被改變。

a.add_(1)

print

(a)print

(b)

tensor([ 2., 2., 2., 2., 2.])

[ 2. 2. 2. 2. 2.]

將numpy array 轉換成tensor

觀察numpy array如何自動轉換成 torch tensor

import numpy as np

a = np.ones(5)

b = torch.from_numpy(a)

np.add(a,

1,out=a)

print

(a)print

(b)

[ 2. 2. 2. 2. 2.]

tensor([ 2., 2., 2., 2., 2.], dtype=torch.float64)

Pytorch快速入門

附錄qi 學習經歷 博主在半年內近乎從零開始了解深度學習,並直接跳過了機器學習的內容,沒有系統的上過與深度學習有關的課程,也是第一次上手pythorch,且以前也很少用python進行程式設計.幾乎都在用matlab與c 因此一開始接觸起來很吃力,甚至走了不少彎路,在這裡將自己通過學習與交流得到的一...

pyTorch 快速入門

前言 疫情太嚴重推遲開學了,可能三月份甚至四月份才開學,這個寒假真長,利用這段時間在家學點東西。如果足夠自律,就能夠充分利用時間 如果足夠自律,就能不斷地補充自己的不足 如果足夠自律,就能紮實深度學習理論基礎 如果足夠自律,就能進一步提公升 能力。這一年,希望自己能夠自律些,一步步靠近合格的演算法工...

Pytorch 快速入門(一)

pytorch是facebook 的 ai 研究團隊發布了乙個基於 python的科學計算包,旨在服務兩類場合 乙個提供了高度靈活性和效率的深度學習實驗性平台 匯入pytorch的包import torchjupyter notebook 現在,pytorch看起來真的像乙個框架了,而純tensor...