詳細的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...