自拍偷在线精品自拍偷,亚洲欧美中文日韩v在线观看不卡

詳解PyTorch基本操作

開發(fā) 前端 深度學習
本篇帶給大家PyTorch一些基本操作,PyTorch是一個基于Python的科學計算包,提供最大靈活性和速度的深度學習研究平臺。

[[406246]]

什么是 PyTorch?

PyTorch是一個基于Python的科學計算包,提供最大靈活性和速度的深度學習研究平臺。

張量

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

讓我們構造一個簡單的張量并檢查輸出。首先讓我們看看我們?nèi)绾螛嫿ㄒ粋€ 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)在讓我們構造一個隨機初始化的矩陣:

  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ù)構造張量:

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

輸出:

  1. tensor([5.5000, 3.0000]) 

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

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

「浮動張量?!?/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ù)張量的大小自動識別維度。

  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.]]) 

張量運算

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

  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的轉換

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

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

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

「將 Torch 張量轉換為 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í)行求和運算并檢查值的變化:

  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ù)組轉換為 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) 

所以,正如你所看到的,就是這么簡單!

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

AutoGrad

該autograd包提供自動求導為上張量的所有操作。

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

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

「下面使用 Autograd 進行反向傳播?!?/h3>

如果requires_grad=True,則 Tensor 對象會跟蹤它是如何創(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=<AddBackward0>) 

因為requires_grad=True,z知道它是通過增加兩個張量的產(chǎn)生z = x + y。

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

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

  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.]) 

下面例子是計算log(x)的導數(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]) 

 【編輯推薦】

 

責任編輯:姜華 來源: Python之王
相關推薦

2024-10-22 15:51:42

PyTorch張量

2010-07-14 12:57:59

Perl字符串

2010-02-02 17:08:22

2023-05-19 07:51:15

ChannelGolang

2010-05-11 09:41:56

MySQL基本操作

2014-12-03 09:52:07

IP

2023-07-04 08:41:08

Redis數(shù)據(jù)類型

2011-01-11 14:56:51

Linux基本操作

2009-06-12 15:13:12

Hibernate學習

2010-04-13 13:02:43

Unix操作系統(tǒng)

2023-12-31 13:05:19

pytorch深度學習框架

2009-12-29 18:29:09

Silverlight

2010-02-23 16:32:29

WCF服務

2023-12-31 16:35:31

Pytorch函數(shù)深度學習

2009-09-18 14:51:19

LINQ TO SQL

2021-07-01 07:51:45

Netty架構NIO

2010-07-12 09:43:38

Symbian開發(fā)

2010-03-30 15:25:42

Linux Nginx

2010-02-03 15:19:28

Linux yum

2010-03-03 16:57:28

Python字符
點贊
收藏

51CTO技術棧公眾號