<ruby id="bdb3f"></ruby>

    <p id="bdb3f"><cite id="bdb3f"></cite></p>

      <p id="bdb3f"><cite id="bdb3f"><th id="bdb3f"></th></cite></p><p id="bdb3f"></p>
        <p id="bdb3f"><cite id="bdb3f"></cite></p>

          <pre id="bdb3f"></pre>
          <pre id="bdb3f"><del id="bdb3f"><thead id="bdb3f"></thead></del></pre>

          <ruby id="bdb3f"><mark id="bdb3f"></mark></ruby><ruby id="bdb3f"></ruby>
          <pre id="bdb3f"><pre id="bdb3f"><mark id="bdb3f"></mark></pre></pre><output id="bdb3f"></output><p id="bdb3f"></p><p id="bdb3f"></p>

          <pre id="bdb3f"><del id="bdb3f"><progress id="bdb3f"></progress></del></pre>

                <ruby id="bdb3f"></ruby>

                合規國際互聯網加速 OSASE為企業客戶提供高速穩定SD-WAN國際加速解決方案。 廣告
                [TOC] ## 概述 PyTorch是一個開源的深度學習框架,最初由Facebook's AI Research lab(FAIR)開發和維護。它提供了一個用于構建和訓練神經網絡模型的強大平臺,廣泛用于研究、開發和部署深度學習模型。PyTorch的主要特點和功能包括: * 動態計算圖:PyTorch采用了動態計算圖的方式,使開發人員能夠輕松構建和修改計算圖。這與其他框架如TensorFlow的靜態計算圖方式相比更加直觀和易于調試。 * 自動求導:PyTorch自帶自動求導功能,允許你輕松計算梯度。這在訓練神經網絡和進行梯度下降優化時非常有用。 * 多種模塊和工具:PyTorch提供了深度學習的模塊,如神經網絡層、優化算法、損失函數等。它還支持GPU加速,允許在CPU和GPU上執行高性能計算。 * 豐富的社區支持:PyTorch擁有龐大的用戶和開發者社區,提供了大量教程、示例代碼和第三方擴展,有助于加速深度學習項目的開發。 * 深度學習研究:由于其靈活性和易用性,PyTorch在深度學習研究領域非常受歡迎,研究人員可以方便地快速嘗試新的想法和算法。 ## 張量 張量 (Tensor) 是深度學習的基礎,例如常見的 0 維張量稱為標量 (scalar)、1 維張量稱為向量 (vector)、2 維張量稱為矩陣 (matrix)。Pytorch 本質上就是一個基于張量的數學計算工具包 ``` >>> import torch >>> torch.empty(2, 3) # empty tensor (uninitialized), shape (2,3) tensor([[2.7508e+23, 4.3546e+27, 7.5571e+31], [2.0283e-19, 3.0981e+32, 1.8496e+20]]) >>> torch.rand(2, 3) # random tensor, each value taken from [0,1) tensor([[0.8892, 0.2503, 0.2827], [0.9474, 0.5373, 0.4672]]) >>> torch.randn(2, 3) # random tensor, each value taken from standard normal distribution tensor([[-0.4541, -1.1986, 0.1952], [ 0.9518, 1.3268, -0.4778]]) >>> torch.zeros(2, 3, dtype=torch.long) # long integer zero tensor tensor([[0, 0, 0], [0, 0, 0]]) >>> torch.zeros(2, 3, dtype=torch.double) # double float zero tensor tensor([[0., 0., 0.], [0., 0., 0.]], dtype=torch.float64) >>> torch.arange(10) tensor([0, 1, 2, 3, 4, 5, 6, 7, 8, 9]) ``` ### 基于已有的數組或 Numpy 數組創建張量 ``` >>> array = [[1.0, 3.8, 2.1], [8.6, 4.0, 2.4]] >>> torch.tensor(array) tensor([[1.0000, 3.8000, 2.1000], [8.6000, 4.0000, 2.4000]]) >>> import numpy as np >>> array = np.array([[1.0, 3.8, 2.1], [8.6, 4.0, 2.4]]) >>> torch.from_numpy(array) tensor([[1.0000, 3.8000, 2.1000], [8.6000, 4.0000, 2.4000]], dtype=torch.float64) ``` ### 使用 GPU 計算張量 ``` >>> torch.rand(2, 3).cuda() tensor([[0.0405, 0.1489, 0.8197], [0.9589, 0.0379, 0.5734]], device='cuda:0') >>> torch.rand(2, 3, device="cuda") tensor([[0.0405, 0.1489, 0.8197], [0.9589, 0.0379, 0.5734]], device='cuda:0') >>> torch.rand(2, 3).to("cuda") tensor([[0.9474, 0.7882, 0.3053], [0.6759, 0.1196, 0.7484]], device='cuda:0') ``` ### 張量計算 ``` >>> x = torch.tensor([1, 2, 3], dtype=torch.double) >>> y = torch.tensor([4, 5, 6], dtype=torch.double) >>> print(x + y) tensor([5., 7., 9.], dtype=torch.float64) >>> print(x - y) tensor([-3., -3., -3.], dtype=torch.float64) >>> print(x * y) tensor([ 4., 10., 18.], dtype=torch.float64) >>> print(x / y) tensor([0.2500, 0.4000, 0.5000], dtype=torch.float64) ``` 計算函數 ``` >>> x.dot(y) tensor(32., dtype=torch.float64) >>> x.sin() tensor([0.8415, 0.9093, 0.1411], dtype=torch.float64) >>> x.exp() tensor([ 2.7183, 7.3891, 20.0855], dtype=torch.float64) ``` 使用 Pytorch 進行計算的好處是更高效的執行速度,尤其當張量存儲的數據很多時,而且還可以借助 GPU 進一步提高計算速度 ``` import torch import timeit M = torch.rand(1000, 1000) print(timeit.timeit(lambda: M.mm(M).mm(M), number=5000)) N = torch.rand(1000, 1000).cuda() print(timeit.timeit(lambda: N.mm(N).mm(N), number=5000)) ``` 輸出 ``` 77.78975469999999 1.6584811117500067 ``` ### 自動微分 1. Pytorch 提供自動計算梯度的功能,可以自動計算一個函數關于一個變量在某一取值下的導數,從而基于梯度對參數進行優化,這就是機器學習中的訓練過程。 2. 使用 Pytorch 計算梯度非常容易,只需要執行`tensor.backward()`,就會自動通過反向傳播 (Back Propogation) 算法完成。 ``` >>> x = torch.tensor([2.], requires_grad=True) >>> y = torch.tensor([3.], requires_grad=True) >>> z = (x + y) * (y - 2) >>> print(z) tensor([5.], grad_fn=<MulBackward0>) >>> z.backward() >>> print(x.grad, y.grad) tensor([1.]) tensor([6.]) ``` ## 加載數據 1. Pytorch 提供了`DataLoader`和`Dataset`類(或`IterableDataset`)專門用于處理數據 2. 它們既可以加載 Pytorch 預置的數據集,也可以加載自定義數據。 3. 數據集類`Dataset`(或`IterableDataset`)負責存儲樣本以及它們對應的標簽 4. 數據加載類`DataLoader`負責迭代地訪問數據集中的樣本 ### Dataset **映射型 (Map-style) 數據集** 繼承自`Dataset`類,表示一個從索引到樣本的映射(索引可以不是整數),這樣我們就可以方便地通過`dataset[idx]`來訪問指定索引的樣本。這也是目前最常見的數據集類型 **迭代型 (Iterable-style) 數據集** 繼承自`IterableDataset`,表示可迭代的數據集,它可以通過`iter(dataset)`以數據流 (steam) 的形式訪問,適用于訪問超大數據集或者遠程服務器產生的數據 如迭代型 ``` from torch.utils.data import IterableDataset, DataLoader class MyIterableDataset(IterableDataset): def __init__(self, start, end): super(MyIterableDataset).__init__() assert end > start self.start = start self.end = end def __iter__(self): return iter(range(self.start, self.end)) ds = MyIterableDataset(start=3, end=7) # [3, 4, 5, 6] # Single-process loading print(list(DataLoader(ds, num_workers=0))) # Directly doing multi-process loading print(list(DataLoader(ds, num_workers=2))) ``` ### DataLoaders Pytorch 提供了`DataLoader`類專門負責處理這些操作,除了基本的`dataset`(數據集)和`batch_size`(batch 大小)參數以外,還有以下常用參數: * `shuffle`:是否打亂數據集; * `sampler`:采樣器,也就是一個索引上的迭代器; * `collate_fn`:批處理函數,用于對采樣出的一個 batch 中的樣本進行處理(例如前面提過的 Padding 操作)。 ## 訓練模型 ### 構建模型 們還是以前面加載的 FashionMNIST 數據庫為例,構建一個神經網絡模型來完成圖像分類。模型同樣繼承自`nn.Module` ``` import torch from torch import nn device = 'cuda' if torch.cuda.is_available() else 'cpu' print(f'Using {device} device') class NeuralNetwork(nn.Module): def __init__(self): super(NeuralNetwork, self).__init__() self.flatten = nn.Flatten() self.linear_relu_stack = nn.Sequential( nn.Linear(28*28, 512), nn.ReLU(), nn.Linear(512, 256), nn.ReLU(), nn.Linear(256, 10), nn.Dropout(p=0.2) ) def forward(self, x): x = self.flatten(x) logits = self.linear_relu_stack(x) return logits model = NeuralNetwork().to(device) print(model) ```
                  <ruby id="bdb3f"></ruby>

                  <p id="bdb3f"><cite id="bdb3f"></cite></p>

                    <p id="bdb3f"><cite id="bdb3f"><th id="bdb3f"></th></cite></p><p id="bdb3f"></p>
                      <p id="bdb3f"><cite id="bdb3f"></cite></p>

                        <pre id="bdb3f"></pre>
                        <pre id="bdb3f"><del id="bdb3f"><thead id="bdb3f"></thead></del></pre>

                        <ruby id="bdb3f"><mark id="bdb3f"></mark></ruby><ruby id="bdb3f"></ruby>
                        <pre id="bdb3f"><pre id="bdb3f"><mark id="bdb3f"></mark></pre></pre><output id="bdb3f"></output><p id="bdb3f"></p><p id="bdb3f"></p>

                        <pre id="bdb3f"><del id="bdb3f"><progress id="bdb3f"></progress></del></pre>

                              <ruby id="bdb3f"></ruby>

                              哎呀哎呀视频在线观看