<kbd id="afajh"><form id="afajh"></form></kbd>
<strong id="afajh"><dl id="afajh"></dl></strong>
    <del id="afajh"><form id="afajh"></form></del>
        1. <th id="afajh"><progress id="afajh"></progress></th>
          <b id="afajh"><abbr id="afajh"></abbr></b>
          <th id="afajh"><progress id="afajh"></progress></th>

          【小白學(xué)習(xí)PyTorch教程】一、PyTorch基本操作

          共 7191字,需瀏覽 15分鐘

           ·

          2021-08-05 09:48

          「@Author:Runsen」

          什么是 PyTorch?

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

          張量

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

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

          import torch
          x = torch.empty(53)
          print(x)

          輸出如下:

          tensor([[2.7298e+324.5650e-412.7298e+32],
                  [4.5650e-410.0000e+000.0000e+00],
                  [0.0000e+000.0000e+000.0000e+00],
                  [0.0000e+000.0000e+000.0000e+00],
                  [0.0000e+000.0000e+000.0000e+00]])

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

          x = torch.rand(53)
          print(x)

          輸出:

          tensor([[1.1608e-019.8966e-011.2705e-01],
                  [2.8599e-015.4429e-013.7764e-01],
                  [5.8646e-011.0449e-024.2655e-01],
                  [2.2087e-016.6702e-015.1910e-01],
                  [1.8414e-012.0611e-019.4652e-04]])

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

          x = torch.tensor([5.53])
          print(x)

          輸出:

          tensor([5.50003.0000])

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

          x = torch.LongTensor(34)
          x

          tensor([[94006673833344,   210453397554,   206158430253,   193273528374],
                  [  214748364849,   210453397588,   249108103216,   223338299441],
                  [  210453397562,   197568495665,   206158430257,   240518168626]])

          「浮動張量。」

          x = torch.FloatTensor(34)
          x

          tensor([[-3.1152e-18,  3.0670e-41,  3.5032e-44,  0.0000e+00],
                  [        nan,  3.0670e-41,  1.7753e+28,  1.0795e+27],
                  [ 1.0899e+27,  2.6223e+20,  1.7465e+19,  1.8888e+31]])

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

          torch.arange(10, dtype=torch.float)

          tensor([0.1.2.3.4.5.6.7.8.9.])

          「重塑張量」

          x = torch.arange(10, dtype=torch.float) 
          x

          tensor([0.1.2.3.4.5.6.7.8.9.])

          使用 .view重塑張量。

          x.view(25)

          tensor([[0.1.2.3.4.],
                  [5.6.7.8.9.]])

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

          x.view(5-1)

          tensor([[0.1.],
                  [2.3.],
                  [4.5.],
                  [6.7.],
                  [8.9.]])

          「改變張量軸」

          改變張量軸:兩種方法viewpermute

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

          x1 = torch.tensor([[1.2.3.], [4.5.6.]])
          print("x1: \n", x1)
          print("\nx1.shape: \n", x1.shape)
          print("\nx1.view(3, -1): \n", x1.view(3 , -1))
          print("\nx1.permute(1, 0): \n", x1.permute(10))


          x1: 
           tensor([[1.2.3.],
                  [4.5.6.]])

          x1.shape: 
           torch.Size([23])

          x1.view(3-1): 
           tensor([[1.2.],
                  [3.4.],
                  [5.6.]])

          x1.permute(10): 
           tensor([[1.4.],
                  [2.5.],
                  [3.6.]])

          張量運算

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

          y = torch.rand(53)
          print(x + y)

          輸出:

          tensor([[0.54291.73721.0293],
                  [0.54180.60881.0718],
                  [1.38940.51481.2892],
                  [0.96260.75220.9633],
                  [0.75470.99310.2709]])

          調(diào)整大小:如果你想調(diào)整張量的形狀,你可以使用“torch.view”:

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

          輸出:

          torch.Size([44]) torch.Size([16]) torch.Size([28])

          PyTorch 和 NumPy的轉(zhuǎn)換

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

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

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

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

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

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

          b = a.numpy()
          print(b)

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

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

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

          輸出:

          tensor([2.2.2.2.2.])
          [2. 2. 2. 2. 2.]

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

          import numpy as no
          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 教程博客上,讓我們看看PyTorch 的 AutoGrad 模塊。

          AutoGrad

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

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

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

          「下面使用 Autograd 進行反向傳播。」

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

          x = torch.tensor([1.2.3.], requires_grad = True)
          print('x: ', x)
          y = torch.tensor([10.20.30.], requires_grad = True)
          print('y: ', y)
          z = x + y 
          print('\nz = x + y')
          print('z:', z)

          x:  tensor([1.2.3.], requires_grad=True)
          y:  tensor([10.20.30.], requires_grad=True)

          z = x + y
          z: tensor([11.22.33.], grad_fn=<AddBackward0>)

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

          s = z.sum()
          print(s)

          tensor(66., grad_fn=<SumBackward0>)

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

          s.backward()
          print('x.grad: ', x.grad)
          print('y.grad: ', y.grad)

          x.grad:  tensor([1.1.1.])
          y.grad:  tensor([1.1.1.])

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

          import torch
          x = torch.tensor([0.50.75], requires_grad=True)
          # 1 / x 
          y = torch.log(x[0] * x[1])
          y.backward()
          x.grad # tensor([2.0000, 1.3333])

          往期精彩回顧




          本站qq群851320808,加入微信群請掃碼:
          瀏覽 87
          點贊
          評論
          收藏
          分享

          手機掃一掃分享

          分享
          舉報
          評論
          圖片
          表情
          推薦
          點贊
          評論
          收藏
          分享

          手機掃一掃分享

          分享
          舉報
          <kbd id="afajh"><form id="afajh"></form></kbd>
          <strong id="afajh"><dl id="afajh"></dl></strong>
            <del id="afajh"><form id="afajh"></form></del>
                1. <th id="afajh"><progress id="afajh"></progress></th>
                  <b id="afajh"><abbr id="afajh"></abbr></b>
                  <th id="afajh"><progress id="afajh"></progress></th>
                  WwW69免费视频 | 夜夜撸av | 亚洲AV无码乱码国产精品蜜芽 | 黄色毛片人妻内内射 | 亚洲乱伦A片|