偷偷摘套内射激情视频,久久精品99国产国产精,中文字幕无线乱码人妻,中文在线中文a,性爽19p

詳解PyTorch基本操作

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

[[406246]]

什么是 PyTorch?

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

張量

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

讓我們構(gòu)造一個(gè)簡單的張量并檢查輸出。首先讓我們看看我們?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)一的長張量。

  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 編程語言的庫,增加了對(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) 

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

接下來在這個(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=<AddBackward0>) 

因?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=<SumBackward0>) 

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

 【編輯推薦】

 

責(zé)任編輯:姜華 來源: Python之王
相關(guān)推薦

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

2014-12-03 09:52:07

IP

2010-05-11 09:41:56

MySQL基本操作

2023-07-04 08:41:08

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

2011-01-11 14:56:51

Linux基本操作

2009-06-12 15:13:12

Hibernate學(xué)習(xí)

2010-04-13 13:02:43

Unix操作系統(tǒng)

2021-07-01 07:51:45

Netty架構(gòu)NIO

2010-07-12 09:43:38

Symbian開發(fā)

2010-02-23 16:32:29

WCF服務(wù)

2009-12-29 18:29:09

Silverlight

2023-12-31 13:05:19

pytorch深度學(xué)習(xí)框架

2009-09-18 14:51:19

LINQ TO SQL

2023-12-31 16:35:31

Pytorch函數(shù)深度學(xué)習(xí)

2010-03-04 15:57:23

Python實(shí)現(xiàn)ini

2010-02-03 15:19:28

Linux yum

2010-03-03 16:57:28

Python字符
點(diǎn)贊
收藏

51CTO技術(shù)棧公眾號(hào)