<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庫介紹

          共 5101字,需瀏覽 11分鐘

           ·

          2021-04-21 09:36

          PyTorch是一個優(yōu)化的張量庫,主要用于使用gpu和cpu的深度學(xué)習(xí)應(yīng)用程序。它是一個針對Python的開源機器學(xué)習(xí)庫,主要由Facebook人工智能研究團隊開發(fā)。它是一個廣泛使用的機器學(xué)習(xí)庫,其他的常用深度學(xué)習(xí)庫是TensorFlow和Keras。
          下圖所示是Google的搜索趨勢,它表明PyTorch庫的受歡迎程度相對高于TensorFlow和Keras。

          PyTorch是基于python和torch庫構(gòu)建的,torch庫支持在圖形處理單元上計算張量。目前是深度學(xué)習(xí)和人工智能研究界最喜歡使用的庫。
          現(xiàn)在讓我們開始實踐PyTorch!
          我們正在使用Jupyter Notebook來運行我們的代碼。我們建議你繼續(xù)學(xué)習(xí)有關(guān)google colaboratory的教程。它是一個Jupyter Notebook環(huán)境,不需要設(shè)置就可以使用,完全在云中運行。我們也可以免費使用GPU。你可以查看此鏈接以獲得使用Colab的一些指導(dǎo)。
          • https://colab.research.google.com/

          張量

          PyTorch是一個處理張量的庫。張量是數(shù)據(jù)的基本單位。它可以是數(shù)字、向量、矩陣或任何n維數(shù)組。它類似于Numpy數(shù)組。
          在開始之前,我們應(yīng)該導(dǎo)入torch模塊,如下所示:
          import torch

          創(chuàng)建張量

          創(chuàng)建一個以單個數(shù)字為數(shù)據(jù)的張量t1
          # Tensor with Single number
          t1 = torch.tensor(5.)
          print(t1)
          Output : tensor(5.)
          5是5.0的簡寫。它用來表示張量是浮點數(shù)。我們可以使用tensor.dtype來驗證, 如果你使用的是Jupyter Notebook,那么你可以直接在單元格中輸入變量并運行它來查看結(jié)果。
          print(t1.dtype)
          Output: torch.float32
          同樣,我們可以創(chuàng)建向量類型的張量,
          # Tensor with 1D vector
          t2 = torch.tensor([123.4])
          print(t2)
          Output: tensor([1., 2., 3., 4.])
          從上面的輸出可以看出,即使向量的一個元素是浮點數(shù),張量也會將所有元素的數(shù)據(jù)類型轉(zhuǎn)換為float。
          現(xiàn)在我們創(chuàng)建一個二維張量
          # Matrix 
          t3 = torch.tensor([[1.23],
                             [456],
                             [789]])
          print(t3)
          Output: tensor([[1., 2., 3.],
                         [4., 5., 6.],
                         [7., 8., 9.]])
          一個三維張量,
          t4 = torch.tensor([
              [[10. , 1112],
               [131415]],
              [[161718],
               [192021]]
          ])
          print(t4)
          Output: tensor([[[10., 11., 12.],
                   [13., 14., 15.]],
                  [[16., 17., 18.],
                   [19., 20., 21.]]])
          如果我們觀察到這些張量其實類似于NumPy數(shù)組,我們可以使用tensor.shape檢查張量形狀。數(shù)組的維數(shù)將是返回形狀的長度。
          我們上面定義的張量的形狀是,
          print(t1.shape)
          Output: torch.Size([])
          因為t1只是一個數(shù)字,所以它的維數(shù)是0。
          print(t2.shape)
          Output: torch.Size([4])
          因為t2是一個向量,它的維數(shù)是1。
          print(t3.shape)
          Output: torch.Size([3, 3])
          因為 t3 是一個3×3的矩陣,所以它的維數(shù)是2
          print(t4.shape)
          Output: torch.Size([2, 2, 3])
          由于t4是由兩個2×3的張量疊加而成,所以它的維數(shù)是3

          張量運算與梯度計算

          我們可以用常用的算術(shù)運算對張量進行運算。而且,張量有一種特殊的能力來計算給定表達式相對于所有自變量的梯度或?qū)?shù)。讓我們看一個例子
          定義一些張量然后初始化一些值,
          x = torch.tensor(3.)
          w = torch.tensor(4. ,requires_grad=True)
          z = torch.tensor(5. ,requires_grad=True)
          x , w , z
          Output: (tensor(3.), tensor(4., requires_grad=True), tensor(5., requires_grad=True))
          在上面的代碼片段中,我們創(chuàng)建了3個張量x、w和z,對于w和z,另外一個參數(shù)需要將require_grad設(shè)置為True。
          現(xiàn)在讓我們用這些張量做一個算術(shù)運算,
          y = x*w + z
          print(y)
          Output: tensor(17., grad_fn=<AddBackward0>)
          所以根據(jù)基本的乘法和加法,我們得到了預(yù)期的結(jié)果,即y=3*4+5=17。

          自動計算導(dǎo)數(shù)

          現(xiàn)在讓我們來討論Pytorch的一個獨特功能,它可以自動計算任何表達式(在本例中是y)對自變量的導(dǎo)數(shù),自變量的參數(shù)需要設(shè)置為True
          這可以通過調(diào)用 y上的.backward方法來實現(xiàn)
          #Compute derivatives
          y.backward()
          我們可以找到y(tǒng) wrt輸入張量的導(dǎo)數(shù),這些導(dǎo)數(shù)存儲在各個輸入張量的梯度性質(zhì)中。
          print("dy/dx =", x.grad)
          print("dy/dw =", w.grad)
          print("dy/dz =", z.grad)
          Output : dy/dx =  None
                   dy/dw =  tensor(3.)
                   dy/dz =  tensor(1.)
          我們可以觀察到以下情況:
          • y wrt x的導(dǎo)數(shù)的值為“None”,因為參數(shù)requires_grad需要設(shè)置為False
          • y wrt w的導(dǎo)數(shù)的值是3,因為dy/dw=x=3
          • y wrt z的導(dǎo)數(shù)的值是1,因為dy/dz=1

          帶NumPy的PyTorch

          NumPy是一個流行的開源庫,用于python中的科學(xué)和數(shù)學(xué)計算。它還支持對大型多維數(shù)組的操作以及基于線性代數(shù)、傅立葉變換和矩陣的計算。NumPy擁有一個龐大的支持庫生態(tài)系統(tǒng),包括Pandas、Matplotlib和OpenCv。
          因此PyTorch與NumPy進行互操作,以利用NumPy的工具和庫,然后進一步擴展功能。
          首先,讓我們創(chuàng)建一個NumPy數(shù)組。
          #First create a numpy array 
          import numpy as np
          x  = np.array([12.3])
          print(x)
          Output: array([1., 2., 3.])
          所以我們可以使用 torch.from_numpy( )
          #Create a tensor from numpy array
          y. = torch.from_numpy(x)
          print(y)
          Output: tensor([1., 2., 3.], dtype=torch.float64)
          我們可以使用.dtype檢查數(shù)據(jù)類型
          print(x.dtype)
          print(y.dtype)
          Output: float64
                  torch.float64
          現(xiàn)在我們可以使用.NumPy() 方法將PyTorch張量轉(zhuǎn)換為NumPy數(shù)組
          z = y.numpy()
          print(z)
          Output: array([1., 2., 3.])
          與NumPy的互操作性是必需的,因為你將使用的大多數(shù)數(shù)據(jù)集都很可能在NumPy中處理。
          在這里,你可能想知道為什么我們使用Pytorch而不是NumPy,因為它還提供了處理多維數(shù)組和執(zhí)行大型計算所需的所有庫和實用程序。主要有兩個原因:
          • AutoGrad:為張量運算計算梯度的能力是一種強大的能力,對于訓(xùn)練神經(jīng)網(wǎng)絡(luò)和執(zhí)行反向傳播是必不可少的。
          • GPU支持:在處理大量數(shù)據(jù)集和大型模型時,PyTorch張量操作在圖形處理單元(GPU)中執(zhí)行,這將使普通cpu所需的時間減少40倍到50倍。
          因此,PyTorch是一個非常強大的深度學(xué)習(xí)庫,它的表現(xiàn)力和python特性在研究和開發(fā)社區(qū)得到了廣泛的應(yīng)用。


          ?------------------------------------------------


          雙一流高校研究生團隊創(chuàng)建

          專注于計算機視覺原創(chuàng)并分享相關(guān)知識?

          聞道有先后,術(shù)業(yè)有專攻,如是而已╮(╯_╰)╭


          瀏覽 82
          點贊
          評論
          收藏
          分享

          手機掃一掃分享

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

          手機掃一掃分享

          分享
          舉報
          <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>
                  亚洲乱伦小说网 | 亚洲高清视频免费在线观看 | 在线看片操 | 操学生妹在线 | 久久国内综合视频 |