日本综合一区二区|亚洲中文天堂综合|日韩欧美自拍一区|男女精品天堂一区|欧美自拍第6页亚洲成人精品一区|亚洲黄色天堂一区二区成人|超碰91偷拍第一页|日韩av夜夜嗨中文字幕|久久蜜综合视频官网|精美人妻一区二区三区

RELATEED CONSULTING
相關(guān)咨詢
選擇下列產(chǎn)品馬上在線溝通
服務(wù)時(shí)間:8:30-17:00
你可能遇到了下面的問題
關(guān)閉右側(cè)工具欄

新聞中心

這里有您想知道的互聯(lián)網(wǎng)營(yíng)銷解決方案
詳解PyTorch基本操作

什么是 PyTorch?

PyTorch是一個(gè)基于Python的科學(xué)計(jì)算包,提供最大靈活性和速度的深度學(xué)習(xí)研究平臺(tái)。

從網(wǎng)站建設(shè)到定制行業(yè)解決方案,為提供成都網(wǎng)站設(shè)計(jì)、網(wǎng)站制作服務(wù)體系,各種行業(yè)企業(yè)客戶提供網(wǎng)站建設(shè)解決方案,助力業(yè)務(wù)快速發(fā)展。創(chuàng)新互聯(lián)建站將不斷加快創(chuàng)新步伐,提供優(yōu)質(zhì)的建站服務(wù)。

張量

張量類似于NumPy 的n 維數(shù)組,此外張量也可以在 GPU 上使用以加速計(jì)算。

讓我們構(gòu)造一個(gè)簡(jiǎn)單的張量并檢查輸出。首先讓我們看看我們?nèi)绾螛?gòu)建一個(gè) 5×3 的未初始化矩陣:

 
 
 
 
  1. import torch 
  2. x = torch.empty(5, 3) 
  3. print(x) 

輸出如下:

 
 
 
 
  1. tensor([[2.7298e+32, 4.5650e-41, 2.7298e+32], 
  2.         [4.5650e-41, 0.0000e+00, 0.0000e+00], 
  3.         [0.0000e+00, 0.0000e+00, 0.0000e+00], 
  4.         [0.0000e+00, 0.0000e+00, 0.0000e+00], 
  5.         [0.0000e+00, 0.0000e+00, 0.0000e+00]]) 

現(xiàn)在讓我們構(gòu)造一個(gè)隨機(jī)初始化的矩陣:

 
 
 
 
  1. x = torch.rand(5, 3) 
  2. print(x) 

輸出:

 
 
 
 
  1. tensor([[1.1608e-01, 9.8966e-01, 1.2705e-01], 
  2.         [2.8599e-01, 5.4429e-01, 3.7764e-01], 
  3.         [5.8646e-01, 1.0449e-02, 4.2655e-01], 
  4.         [2.2087e-01, 6.6702e-01, 5.1910e-01], 
  5.         [1.8414e-01, 2.0611e-01, 9.4652e-04]]) 

直接從數(shù)據(jù)構(gòu)造張量:

 
 
 
 
  1. x = torch.tensor([5.5, 3]) 
  2. print(x) 

輸出:

 
 
 
 
  1. tensor([5.5000, 3.0000]) 

創(chuàng)建一個(gè)統(tǒng)一的長(zhǎng)張量。

 
 
 
 
  1. x = torch.LongTensor(3, 4) 
  2.  
  3. tensor([[94006673833344,   210453397554,   206158430253,   193273528374], 
  4.         [  214748364849,   210453397588,   249108103216,   223338299441], 
  5.         [  210453397562,   197568495665,   206158430257,   240518168626]]) 

「浮動(dòng)張量?!?/h3>
 
 
 
 
  1. x = torch.FloatTensor(3, 4) 
  2.  
  3. tensor([[-3.1152e-18,  3.0670e-41,  3.5032e-44,  0.0000e+00], 
  4.         [        nan,  3.0670e-41,  1.7753e+28,  1.0795e+27], 
  5.         [ 1.0899e+27,  2.6223e+20,  1.7465e+19,  1.8888e+31]]) 

「在范圍內(nèi)創(chuàng)建張量」

 
 
 
 
  1. torch.arange(10, dtype=torch.float) 
  2.  
  3. tensor([0., 1., 2., 3., 4., 5., 6., 7., 8., 9.]) 

「重塑張量」

 
 
 
 
  1. x = torch.arange(10, dtype=torch.float)  
  2.  
  3. tensor([0., 1., 2., 3., 4., 5., 6., 7., 8., 9.]) 

使用 .view重塑張量。

 
 
 
 
  1. x.view(2, 5) 
  2.  
  3. tensor([[0., 1., 2., 3., 4.], 
  4.         [5., 6., 7., 8., 9.]]) 

-1根據(jù)張量的大小自動(dòng)識(shí)別維度。

 
 
 
 
  1. x.view(5, -1) 
  2.  
  3. tensor([[0., 1.], 
  4.         [2., 3.], 
  5.         [4., 5.], 
  6.         [6., 7.], 
  7.         [8., 9.]]) 

「改變張量軸」

改變張量軸:兩種方法view和permute

view改變張量的順序,而permute只改變軸。

 
 
 
 
  1. x1 = torch.tensor([[1., 2., 3.], [4., 5., 6.]]) 
  2. print("x1: \n", x1) 
  3. print("\nx1.shape: \n", x1.shape) 
  4. print("\nx1.view(3, -1): \n", x1.view(3 , -1)) 
  5. print("\nx1.permute(1, 0): \n", x1.permute(1, 0)) 
  6.  
  7.  
  8. x1:  
  9.  tensor([[1., 2., 3.], 
  10.         [4., 5., 6.]]) 
  11.  
  12. x1.shape:  
  13.  torch.Size([2, 3]) 
  14.  
  15. x1.view(3, -1):  
  16.  tensor([[1., 2.], 
  17.         [3., 4.], 
  18.         [5., 6.]]) 
  19.  
  20. x1.permute(1, 0):  
  21.  tensor([[1., 4.], 
  22.         [2., 5.], 
  23.         [3., 6.]]) 

張量運(yùn)算

在下面的示例中,我們將查看加法操作:

 
 
 
 
  1. y = torch.rand(5, 3) 
  2. print(x + y) 

輸出:

 
 
 
 
  1. tensor([[0.5429, 1.7372, 1.0293], 
  2.         [0.5418, 0.6088, 1.0718], 
  3.         [1.3894, 0.5148, 1.2892], 
  4.         [0.9626, 0.7522, 0.9633], 
  5.         [0.7547, 0.9931, 0.2709]]) 

調(diào)整大?。喝绻阆胝{(diào)整張量的形狀,你可以使用“torch.view”:

 
 
 
 
  1. x = torch.randn(4, 4) 
  2. y = x.view(16) 
  3. # 大小-1是從其他維度推斷出來的 
  4. z = x.view(-1, 8)  
  5. print(x.size(), y.size(), z.size()) 

輸出:

 
 
 
 
  1. torch.Size([4, 4]) torch.Size([16]) torch.Size([2, 8]) 

PyTorch 和 NumPy的轉(zhuǎn)換

NumPy 是Python 編程語(yǔ)言的庫(kù),增加了對(duì)大型、多維數(shù)組和矩陣的支持,以及對(duì)這些數(shù)組進(jìn)行操作的大量高級(jí)數(shù)學(xué)函數(shù)集合。

將Torch中Tensor 轉(zhuǎn)換為 NumPy 數(shù)組,反之亦然是輕而易舉的!

Torch Tensor 和 NumPy 數(shù)組將共享它們的底層內(nèi)存位置 ,改變一個(gè)將改變另一個(gè)。

「將 Torch 張量轉(zhuǎn)換為 NumPy 數(shù)組:」

 
 
 
 
  1. a = torch.ones(5) 
  2. print(a) 

輸出:tensor([1., 1., 1., 1., 1.])

 
 
 
 
  1. b = a.numpy() 
  2. print(b) 

輸出:[1., 1., 1., 1., 1.]

讓我們執(zhí)行求和運(yùn)算并檢查值的變化:

 
 
 
 
  1. a.add_(1) 
  2. print(a) 
  3. print(b) 

輸出:

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

「將 NumPy 數(shù)組轉(zhuǎn)換為 Torch 張量:」

 
 
 
 
  1. import numpy as no 
  2. a = np.ones(5) 
  3. b = torch.from_numpy(a) 
  4. np.add(a, 1, out=a) 
  5. print(a) 
  6. print(b) 

輸出:

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

所以,正如你所看到的,就是這么簡(jiǎn)單!

接下來在這個(gè) PyTorch 教程博客上,讓我們看看PyTorch 的 AutoGrad 模塊。

AutoGrad

該autograd包提供自動(dòng)求導(dǎo)為上張量的所有操作。

它是一個(gè)按運(yùn)行定義的框架,這意味著您的反向傳播是由您的代碼運(yùn)行方式定義的,并且每次迭代都可以不同。

  • torch.autograd.function (函數(shù)的反向傳播)
  • torch.autograd.functional (計(jì)算圖的反向傳播)
  • torch.autograd.gradcheck (數(shù)值梯度檢查)
  • torch.autograd.anomaly_mode (在自動(dòng)求導(dǎo)時(shí)檢測(cè)錯(cuò)誤產(chǎn)生路徑)
  • torch.autograd.grad_mode (設(shè)置是否需要梯度)
  • model.eval() 與 torch.no_grad()
  • torch.autograd.profiler (提供 function 級(jí)別的統(tǒng)計(jì)信息)

「下面使用 Autograd 進(jìn)行反向傳播?!?/h3>

如果requires_grad=True,則 Tensor 對(duì)象會(huì)跟蹤它是如何創(chuàng)建的。

 
 
 
 
  1. x = torch.tensor([1., 2., 3.], requires_grad = True) 
  2. print('x: ', x) 
  3. y = torch.tensor([10., 20., 30.], requires_grad = True) 
  4. print('y: ', y) 
  5. z = x + y  
  6. print('\nz = x + y') 
  7. print('z:', z) 
  8.  
  9. x:  tensor([1., 2., 3.], requires_grad=True) 
  10. y:  tensor([10., 20., 30.], requires_grad=True) 
  11.  
  12. z = x + y 
  13. z: tensor([11., 22., 33.], grad_fn=

因?yàn)閞equires_grad=True,z知道它是通過增加兩個(gè)張量的產(chǎn)生z = x + y。

 
 
 
 
  1. s = z.sum() 
  2. print(s) 
  3.  
  4. tensor(66., grad_fn=

s是由它的數(shù)字總和創(chuàng)建的。當(dāng)我們調(diào)用.backward(),反向傳播從s開始運(yùn)行。然后可以計(jì)算梯度。

 
 
 
 
  1. s.backward() 
  2. print('x.grad: ', x.grad) 
  3. print('y.grad: ', y.grad) 
  4.  
  5. x.grad:  tensor([1., 1., 1.]) 
  6. y.grad:  tensor([1., 1., 1.]) 

下面例子是計(jì)算log(x)的導(dǎo)數(shù)為1 / x

 
 
 
 
  1. import torch 
  2. x = torch.tensor([0.5, 0.75], requires_grad=True) 
  3. # 1 / x  
  4. y = torch.log(x[0] * x[1]) 
  5. y.backward() 
  6. x.grad # tensor([2.0000, 1.3333]) 

 【編輯推薦】

  1. 這 7 個(gè) Linux 命令,你是怎么來使用的?
  2. 或許這是目前為止比較好的 Git 教程了
  3. 微信小程序基礎(chǔ)架構(gòu)淺析
  4. 后悔藥來了!iOS 15刷機(jī)降級(jí)iOS 14.6詳細(xì)圖文教程
  5. 基于WebAssembly的熱門語(yǔ)言項(xiàng)目

分享標(biāo)題:詳解PyTorch基本操作
轉(zhuǎn)載來于:http://www.dlmjj.cn/article/djiijpi.html