從張量到自動微分:PyTorch入門教程

2021-02-13 論智

編者按:DataCamp的Sayak Paul帶你入門張量、PyTorch。

在深度學習中,常常看到張量是數據結構的基石這一說法。Google的機器學習庫TensorFlow甚至都以張量(tensor)命名。張量是線性代數中用到的一種數據結構,類似向量和矩陣,你可以在張量上進行算術運算。

PyTorch(點擊閱讀)則是由Facebook創建的python包,提供兩個高層特性:1) 類似Numpy的基於GPU加速的張量運算 2) 在基於回放(tape-based)的自動微分系統之上構建的深度神經網絡。

本教程將介紹什麼是張量,如何在PyTorch中操作張量:

張量介紹

PyTorch介紹

PyTorch安裝步驟

PyTorch下的一些張量操作

基於PyTorch實現一個簡單的神經網絡

閒話少敘,讓我們開始介紹張量吧。

張量是向量和矩陣的推廣,可以理解為多維數組。知名的《深度學習》(Goodfellow等編寫)是這樣介紹張量的:

在一般意義上,以基於可變數目的軸的規則網格組織的一組數字稱為張量。

標量是零階張量。向量是一階張量,矩陣是二階張量。

下面是張量的示意圖:

現在讓我們以更清晰易懂的方式構建張量背後的直覺。

張量是現代機器學習的基本構建。它是一個數據容器,大多數情況下包含數字,有時可能包含字符串(不過這罕見)。所以可以把張量想像成一桶數字。

人們經常混用張量和多維數組。不過有時需要嚴格區分兩者,如StackExchange指出:

張量和多維數組是不同類型的對象。前者是一種函數,後者是適宜在坐標系統中表示張量的一種數據結構。

在數學上,張量由多元線性函數定義。一個多元線性函數包含多個向量變量。張量域是張量值函數。更嚴謹的數學解釋,可以參考https://math.stackexchange.com/q/10282

所以,張量是需要定義的函數或容器。實際上,當數據傳入時,計算才真正發生。當不需要嚴格區分數組和張量的時候,數組或多維數組(1D, 2D, …, ND)一般可以視作張量。

現在我們稍微講下張量表述(Tensor notation)。

張量表述和矩陣類似,一般用大寫字母表示張量,帶整數下標的小寫字母表示張量中的標量值。

標量、向量、矩陣的許多運算同樣適用於張量。

張量和張量代數是物理和工程領域廣泛使用的工具。機器學習的許多技術,深度學習模型的訓練和操作,常常使用張量這一術語進行描述。

PyTorch是一個非常靈活的基於Python的深度學習研究平臺。

PyTorch特性

Kirill Dubovikov寫的PyTorch vs TensorFlow — spotting the difference比較了PyTorch和TensorFlow這兩個框架。如果你想了解TensorFlow,可以看看Karlijn Willems寫的教程TensorFlow Tutorial For Beginners。

PyTorch的安裝很簡單。如果你的顯卡支持,可以安裝GPU版本的PyTorch。

你可以使用pip安裝torch、torchvision這兩個包,也可以使用conda安裝pytorch torchvision這兩個包。注意,Windows平臺上,PyTorch不支持Python 2.7,需要基於Python 3.5以上的版本安裝。

具體的安裝命令可以通過PyTorch官網查詢: https://pytorch.org/get-started/locally/

好了,下面讓我們直接深入PyTorch下的一些張量算術。

PyTorch下的一些張量操作

首先,導入所需的庫:

import torch

如果出現報錯,說明PyTorch沒有安裝成功,請參考上一節重新安裝。

現在,我們構造一個5×3的矩陣:

x = torch.rand(5, 3)

print(x)

輸出:

tensor([[ 0.5991,  0.9365,  0.6120],

       [ 0.3622,  0.1408,  0.8811],

       [ 0.6248,  0.4808,  0.0322],

       [ 0.2267,  0.3715,  0.8430],

       [ 0.0145,  0.0900,  0.3418]])

再構造一個5×3的矩陣,不過這次用零初始化,並指定數據類型為long:

x = torch.zeros(5, 3, dtype=torch.long)

print(x)

輸出:

tensor([[ 0,  0,  0],

       [ 0,  0,  0],

       [ 0,  0,  0],

       [ 0,  0,  0],

       [ 0,  0,  0]])

構造張量時直接提供數據:

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

print(x)

輸出:

tensor([ 5.5000,  3.0000])

如果你想檢驗下自己是否理解了PyTorch中的張量,那可以思考下上面的張量x是什麼類別的。

基於已有張量,可以創建新張量——新張量會復用輸入張量的屬性,比如dtype(數據類型),除非另外給出新值:

x = x.new_ones(5, 3, dtype=torch.double)    

print(x)

x = torch.randn_like(x, dtype=torch.float)    

print(x)

輸出:

tensor([[ 1.,  1.,  1.],

       [ 1.,  1.,  1.],

       [ 1.,  1.,  1.],

       [ 1.,  1.,  1.],

       [ 1.,  1.,  1.]], dtype=torch.float64)

tensor([[-1.2174,  1.1807,  1.4249],

       [-1.1114, -0.8098,  0.4003],

       [ 0.0780, -0.5011, -1.0985],

       [ 1.8160, -0.3778, -0.8610],

       [-0.7109, -2.0509, -1.2079]])

獲取張量的尺寸:

print(x.size())

輸出:

torch.Size([5, 3])

注意,torch.Size事實上是一個元組,支持所有元組操作。

現在,讓我們看下張量的加法。

張量加法

兩個張量分素相加,得到維度一致的張量,結果張量中每個標量的值是相應標量的和。

y = torch.rand(5, 3)

print(x)

print(y)

print(x + y)

輸出:

tensor([[-1.2174,  1.1807,  1.4249],

       [-1.1114, -0.8098,  0.4003],

       [ 0.0780, -0.5011, -1.0985],

       [ 1.8160, -0.3778, -0.8610],

       [-0.7109, -2.0509, -1.2079]])

tensor([[ 0.8285,  0.7619,  0.1147],

       [ 0.1624,  0.8994,  0.6119],

       [ 0.2802,  0.2950,  0.7098],

       [ 0.8132,  0.3382,  0.4383],

       [ 0.6738,  0.2022,  0.3264]])

tensor([[-0.3889,  1.9426,  1.5396],

       [-0.9490,  0.0897,  1.0122],

       [ 0.3583, -0.2061, -0.3887],

       [ 2.6292, -0.0396, -0.4227],

       [-0.0371, -1.8487, -0.8815]])

除了使用+運算符外,也可以調用torch.add方法(兩者是等價的):

print(torch.add(x, y))

下面我們來看張量減法。

張量減法

兩個張量分素相減,得到維度一致的張量,結果張量中每個標量的值是相應標量之差。

接著我們將討論張量相乘

張量乘法

假設mat1是一個(n×m)的張量,mat2是一個(m×p)的張量,兩者相乘,將得到一個(n×p)的張量。

mat1 = torch.randn(2, 3)

mat2 = torch.randn(3, 3)

print(mat1)

print(mat2)

print(torch.mm(mat1, mat2))

輸出:

tensor([[ 1.9490, -0.6503, -1.9448],

       [-0.7126,  1.0519, -0.4250]])

tensor([[ 0.0846,  0.4410, -0.0625],

       [-1.3264, -0.5265,  0.2575],

       [-1.3324,  0.6644,  0.3528]])

tensor([[ 3.6185, -0.0901, -0.9753],

       [-0.8892, -1.1504,  0.1654]])

注意,torch.mm()不支持廣播(broadcast)。

廣播

「廣播」這一術語用於描述如何在形狀不一的數組上應用算術運算。在滿足特定限制的前提下,較小的數組「廣播至」較大的數組,使兩者形狀互相兼容。廣播提供了一個向量化數組操作的機制,這樣遍歷就發生在C層面,而不是Python層面。廣播可以避免不必要的數據複製,通常導向高效的算法實現。不過,也存在不適用廣播的情形(可能導致拖慢計算過程的低效內存使用)。

可廣播的一對張量需滿足以下規則:

讓我們通過幾段代碼來理解PyTorch的廣播機制。

x=torch.empty(5,7,3)

y=torch.empty(5,7,3)

相同形狀的張量總是可廣播的,因為總能滿足以上規則。

x=torch.empty((0,))

y=torch.empty(2,2)

不可廣播(x不滿足第一條規則)。

# 為了清晰易讀,可以對齊尾部

x=torch.empty(5,3,4,1)

y=torch.empty(  3,1,1)

x和y可廣播:

倒數第一個維度:兩者的尺寸均為1

倒數第二個維度:y尺寸為1

倒數第三個維度:兩者尺寸相同

倒數第四個維度:y該維度不存在

但下面一對就不可廣播了:

x=torch.empty(5,2,4,1)

y=torch.empty(  3,1,1)

這是因為倒數第三個維度:2 != 3

現在你對「可廣播」這一概念已經有所了解了,讓我們看下,廣播後的張量是什麼樣的。

如果張量x和張量y是可廣播的,那麼廣播後的張量尺寸按照如下方法計算:

如果x和y的維數不等,在維數較少的張量上添加尺寸為1的維度。結果維度尺寸是x和y相應維度尺寸的較大者。例如:

x=torch.empty(5,1,4,1)

y=torch.empty(  3,1,1)

(x+y).size()

輸出:

torch.Size([5, 3, 4, 1])

再如:

x=torch.empty(1)

y=torch.empty(3,1,7)

(x+y).size()

輸出:

torch.Size([3, 1, 7])

再看一個不可廣播的例子:

x=torch.empty(5,2,4,1)

y=torch.empty(3,1,1)

(x+y).size()

報錯:

RuntimeError                              Traceback (most recent call last)

<ipython-input-17-72fb34250db7> in <module>()

     1 x=torch.empty(5,2,4,1)

     2 y=torch.empty(3,1,1)

----> 3 (x+y).size()

RuntimeError: The size of tensor a (2) must match the size of tensor b (3) at non-singleton dimension 1

你現在應該已經掌握了廣播這個概念了!

張量乘積是最常見的張量乘法,但也存在其他種類的張量乘法,例如張量點積張量縮並

藉助Numpy橋,PyTorch張量和NumPy數組之間的互相轉換極其迅速。下面就讓我們來了解一下這個概念。

NumPy橋

NumPy橋使得PyTorch張量和NumPy數組共享底層內存地址,對其中之一的修改會反映到另一個上。

轉換PyTorch張量至NumPy數組。

a = torch.ones(5)

b = a.numpy()

print(a)

print(b)

輸出:

tensor([ 1.,  1.,  1.,  1.,  1.])

[1. 1. 1. 1. 1.]

在這一節中,我們討論了一些基本的張量算術,例如加法、減法、張量乘積。下一節我們將使用PyTorch實現一個基本的神經網絡。

如果你想要溫習一下神經網絡的概念,可以參考以下文章:

在實現神經網絡之前,我們先來討論一下自動微分,這是PyTorch下所有神經網絡的核心,在進行反向傳播計算梯度時尤其有用。

PyTorch的autograd模塊為張量的所有運算提供了自動微分。這是一個define-by-run框架,也就是說,反向傳播由代碼如何運行定義,每個迭代都可以不一樣。

讓我們直接用代碼展示自動微分是如何工作的。

x = torch.ones(2, 2, requires_grad=True)

print(x)

輸出:

tensor([[ 1.,  1.],

       [ 1.,  1.]])

進行加法運算:

y = x + 2

print(y)

輸出:

tensor([[ 3.,  3.],

       [ 3.,  3.]])

再進行一些運算:

z = y * y * 3

out = z.mean()

print(z)

print(out)

輸出:

tensor([[ 27.,  27.],

       [ 27.,  27.]])

tensor(27.)

現在讓我們進行反向傳播:

out.backward()

print(x.grad)

自動微分給出的梯度為:

tensor([[ 4.5000,  4.5000],

       [ 4.5000,  4.5000]])

感興趣的讀者可以手工驗證下梯度。

了解了PyTorch如何進行自動微分之後,讓我們使用PyTorch編碼一個簡單的神經網絡。

我們將創建一個簡單的神經網絡,包括一個隱藏層,一個輸出層。隱藏層使用ReLU激活,輸出層使用sigmoid激活。

構建神經網絡需要引入torch.nn模塊:

import torch.nn as nn

接著定義網絡層尺寸和batch尺寸:

n_in, n_h, n_out, batch_size = 10, 5, 1, 10

現在生成一些輸入數據x和目標數據y,並使用PyTorch張量存儲這些數據。

x = torch.randn(batch_size, n_in)

y = torch.tensor([[1.0], [0.0], [0.0], [1.0], [1.0], [1.0], [0.0], [0.0], [1.0], [1.0]])

接下來,只需一行代碼就可以定義我們的模型:

model = nn.Sequential(nn.Linear(n_in, n_h),

                    nn.ReLU(),

                    nn.Linear(n_h, n_out),

                    nn.Sigmoid())

我們創建了一個輸入 -> 線性 -> relu -> 線性 -> sigmoid的模型。對於需要更多自定義功能的更加複雜的模型,可以定義一個類,具體請參考PyTorch文檔。

現在,我們需要構造損失函數。我們將使用均方誤差:

criterion = torch.nn.MSELoss()

然後定義優化器。我們將使用強大的隨機梯度下降算法,學習率定為0.01.model.parameters()會返回一個模型參數(權重、偏置)上的迭代器。

optimizer = torch.optim.SGD(model.parameters(), lr=0.01)

下面我們跑50個epoch,這依次包括前向傳播、損失計算、反向傳播和參數更新。

for epoch in range(50):

   # 前向傳播

   y_pred = model(x)

   # 計算並列印損失

   loss = criterion(y_pred, y)

   print('epoch: ', epoch,' loss: ', loss.item())

   # 梯度歸零

   optimizer.zero_grad()

   # 反向傳播

   loss.backward()

   # 更新參數

   optimizer.step()

輸出:

epoch:  0  loss:  0.2399429827928543

epoch:  1  loss:  0.23988191783428192

epoch:  2  loss:  0.23982088267803192

epoch:  3  loss:  0.2397598922252655

epoch:  4  loss:  0.23969893157482147

epoch:  5  loss:  0.23963800072669983

epoch:  6  loss:  0.23957709968090057

epoch:  7  loss:  0.23951618373394012

epoch:  8  loss:  0.23945537209510803

epoch:  9  loss:  0.23939454555511475

epoch:  10  loss:  0.23933371901512146

epoch:  11  loss:  0.23927298188209534

epoch:  12  loss:  0.23921218514442444

epoch:  13  loss:  0.23915143311023712

epoch:  14  loss:  0.2390907108783722

epoch:  15  loss:  0.23903003334999084

epoch:  16  loss:  0.23896940052509308

epoch:  17  loss:  0.23890872299671173

epoch:  18  loss:  0.23884813487529755

epoch:  19  loss:  0.23878750205039978

epoch:  20  loss:  0.23872694373130798

epoch:  21  loss:  0.2386663407087326

epoch:  22  loss:  0.2386058121919632

epoch:  23  loss:  0.23854532837867737

epoch:  24  loss:  0.23848481476306915

epoch:  25  loss:  0.23842433094978333

epoch:  26  loss:  0.2383638620376587

epoch:  27  loss:  0.23830339312553406

epoch:  28  loss:  0.2382429838180542

epoch:  29  loss:  0.23818258941173553

epoch:  30  loss:  0.2381247729063034

epoch:  31  loss:  0.2380656749010086

epoch:  32  loss:  0.23800739645957947

epoch:  33  loss:  0.2379491776227951

epoch:  34  loss:  0.2378900945186615

epoch:  35  loss:  0.23783239722251892

epoch:  36  loss:  0.23777374625205994

epoch:  37  loss:  0.23771481215953827

epoch:  38  loss:  0.23765745759010315

epoch:  39  loss:  0.23759838938713074

epoch:  40  loss:  0.23753997683525085

epoch:  41  loss:  0.2374821901321411

epoch:  42  loss:  0.23742322623729706

epoch:  43  loss:  0.23736533522605896

epoch:  44  loss:  0.23730707168579102

epoch:  45  loss:  0.23724813759326935

epoch:  46  loss:  0.23719079792499542

epoch:  47  loss:  0.23713204264640808

epoch:  48  loss:  0.23707345128059387

epoch:  49  loss:  0.2370160073041916

PyTorch的寫法很清晰,配上注釋,應該不難理解。如果仍有不解之處,可以參考下面的講解:

y_pred獲取模型一次前向傳播的預測值。y_pred和目標變量y一起傳給criterion以計算損失。

接著,optimizer.zero_grad()清空上一次迭代的梯度。

接下來的loss.backward()集中體現了PyTorch的神奇之處——這裡用到了PyTorch的Autograd(自動計算梯度)特性。Autograd基於動態創建的計算圖自動計算所有參數上的梯度。總的來說,這一步進行的是梯度下降和反向傳播。

最後,我們調用optimizer.step(),使用新的梯度更新一次所有參數。

恭喜你讀到了這篇長文的結尾。這篇文章從張量講到了自動微分,同時基於PyTorch及其張量系統實現了一個簡單的神經網絡。

如果你想了解更多關於PyTorch的內容,或想進一步深入,請閱讀PyTorch的官方文檔和教程,這些文檔和教程寫得非常好。你可以從PyTorch官網找到這些文檔和教程。

撰寫這篇教程的時候,我參考了以下內容:

如果有問題要問,或者有想法要討論,歡迎留言!

如果你打算進一步學習Python,可以參加DataCamp的Statistical Thinking in Python課程。

原文地址:https://www.datacamp.com/community/tutorials/investigating-tensors-pytorch

相關焦點

  • 60分鐘入門PyTorch,官方教程手把手教你訓練第一個深度學習模型(附連結)
    那麼,入門 PyTorch 深度學習需要多久?PyTorch 的一份官方教程表示:只需要 60 分鐘。教程連結:https://pytorch.org/tutorials/beginner/deep_learning_60min_blitz.html這是一份非常簡潔的學習材料,目標是讓學習者了解 PyTorch 的 Tensor 庫和神經網絡,以及如何訓練一個可以進行圖像分類的神經網絡。
  • PyTorch 深度學習官方入門中文教程 pdf 下載|PyTorchChina
    PyTorch提供了兩個高級功能: 1.具有強大的GPU加速的張量計算(如Numpy) 2.包含自動求導系統的深度神經網絡 除了Facebook之外,Twitter、GMU和Salesforce等機構都採用了PyTorch。
  • PyTorch進階之路(一):張量與梯度
    這是「PyTorch: Zero to GANs」系列教程的第一篇,介紹了 PyTorch 模型的基本構件:張量和梯度。完整系列教程包括:PyTorch 基礎:張量&梯度(本文)線性回歸 & 梯度下降:https://medium.com/jovian-io/linear-regression-with-pytorch-3dde91d60b50用 Logistic 回歸進行分類:https://medium.com/jovian-io/image-classification-using-logistic-regression-in-pytorch-ebb96cc9eb79
  • 深度學習大講堂之pytorch入門
    今天小天就帶大家從數據操作、自動求梯度和神經網絡設計的pytorch版本三個方面來入門pytorch。二、自動求梯度很多人看到這裡是懵的,因為為什麼會得出導數的結果,在這裡我給出自動求導的一些原理性的知識,希望能幫助大家更好的學習pytorch
  • 60分鐘入門PyTorch
    60 分鐘帶你快速入門 PyTorch 的官方教程。文末有最新的更新,介紹了深度學習的入門資料推薦、PyTorch 的教程推薦,如果閱讀本文後還是有些困難的,可以看看文末推薦的深度學習書籍和教程,先入門深度學習,有一定基礎再學習 PyTorch,效果會更好!)
  • 福利,PyTorch中文版官方教程來了
    近日,一款完整的 PyTorch 中文版官方教程出爐,讀者朋友可以更好的學習了解 PyTorch 的相關細節了。教程作者來自 pytorchchina.com。教程網站:http://pytorch123.com教程裡有什麼教程根據 PyTorch 官方版本目錄,完整地還原了所有的內容。包括簡單的環境搭建、快速入門相關 API、高級操作、圖像處理實戰、文本處理實戰、GAN 和強化學習等,基本涵蓋了目前所有深度學習相關的知識點。
  • PyTorch 中文教程最新版
    本文檔的定位是 PyTorch 入門教程,主要針對想要學習 PyTorch 的學生群體或者深度學習愛好者。通過教程的學習,能夠實現零基礎想要了解和學習深度學習,降低自學的難度,快速學習 PyTorch。
  • 60 分鐘入門 PyTorch !這裡有一份新手指南
    這次給大家帶來的是 60 分鐘極速入門 PyTorch 的小教程,助你輕鬆上手 PyTorch!大家也可直接在實驗樓學習:https://www.shiyanlou.com/courses/1073這個 PyTorch 教程有哪些與眾不同的地方?
  • 帶你少走彎路:強烈推薦的Pytorch快速入門資料和翻譯(可下載)
    ,受到很多好評,讀者強烈建議我出一個pytorch的快速入門路線,經過翻譯和搜索網上資源,我推薦3份入門資料,希望對大家有所幫助。>「PyTorch 深度學習:60分鐘快速入門」為PyTorch官網教程,網上已經有部分翻譯作品,隨著PyTorch1.0版本的公布,這個教程有較大的代碼改動,本人對教程進行重新翻譯,並測試運行了官方代碼,製作成Jupyter Notebook文件(中文注釋)在github予以公布。
  • 《PyTorch中文手冊》來了
    本書提供PyTorch快速入門指南並與最新版本保持一致,其中包含的 Pytorch 教程全部通過測試保證可以成功運行。PyTorch 是一個深度學習框架,旨在實現簡單靈活的實驗。這是一本開源的書籍,目標是幫助那些希望和使用 PyTorch 進行深度學習開發和研究的朋友快速入門,其中包含的 Pytorch 教程全部通過測試保證可以成功運行。
  • 專欄 | pytorch入門總結指南(1)
    考慮到網上的入門教程多且雜,還是打算自己好好整理一下,系統性的學習一下pytroch。https://github.com/bharathgs/Awesome-pytorch-list總結內容包括了,github上的各類高星tutorial(其實內容上基本差不多大同小異的),pytorch中文手冊,《deep learning with pytorch》《深度學習框架pytorch快速開發與實戰》,《深度學習入門之torch》以及官方文檔,說老實話
  • 教程 | 從頭開始了解PyTorch的簡單實現
    本教程展示了如何從了解張量開始到使用 PyTorch 訓練簡單的神經網絡,是非常基礎的 PyTorch 入門資源。
  • 《PyTorch中文手冊》開源!附資源下載連結!
    今天我們強烈推薦一本中文 PyTorch 書籍 ——PyTorch 中文手冊 (pytorch handbook)。這是一本開源的書籍,目標是幫助那些希望和使用 PyTorch 進行深度學習開發和研究的朋友快速入門,其中包含的 Pytorch 教程全部通過測試保證可以成功運行。2.
  • 最新翻譯的官方 PyTorch 簡易入門教程
    把 numpy 數組轉換為 torch 張量看看改變 numpy 數組如何自動改變 torch 張量。完成計算後,您可以調用.backward()並自動計算所有梯度。此張量的梯度將累積到.grad屬性中。要阻止張量跟蹤歷史記錄,可以調用.detach()將其從計算歷史記錄中分離出來,並防止將來的計算被跟蹤。
  • 可微分的「OpenCV」:這是基於PyTorch的可微計算機視覺庫
    機器之心整理參與:思如何打造一個可微分的 OpenCV?如何將圖像處理嵌入到訓練流程中?你需要 Kornia 這個開源可微的計算機視覺庫。但現在有一個問題,OpenCV 是不可微的,這意味著它更多的是做預處理等工作,而不能嵌入到整個訓練流程中。在這個項目中,開發者提出了一種新型開源可微分計算機視覺庫 Kornia,並且它建立在 PyTorch 之上。Kornia 包含了一組例程和可微分模塊,並致力於解決通用計算機視覺問題。
  • 60分鐘入門深度學習工具-PyTorch
    點擊上方「AI算法與圖像處理」,選擇加"星標"或「置頂」重磅乾貨,第一時間送達來源:機器學習初學者60分鐘入門深度學習工具-PyTorch作者:Soumith Chintala原文翻譯自:https://pytorch.org/tutorials/
  • pytorch入門教程
    1.數據表示及運算1.0 Numpy與pytorch比較NumpyPytorch導入模塊import numpy as npimport torch
  • 【Pytorch】PyTorch的4分鐘教程,手把手教你完成線性回歸
    軟體的配置和安裝部分,網上有很多教程,這裡不再贅述,紙上得來終覺淺,絕知此事要躬行。讓我們直接進入Pytorch的世界,開始coding吧!      其中@為張量乘法的重載運算符,x為2*3的張量,值為[[1,2,3],[4,5,6]],與轉換成tensor的z相乘,z的大小是3*2,結果為2*2的張量。
  • 深度學習之Pytorch基礎教程!
    前幾天分享了TensorFlow的基本教程後,很多人在後臺留言說能不能寫寫Pytorch入門。本著粉絲的訴求必須滿足的原則,熬夜幹,有了今天的文章。所以你懂我意思吧,記得轉發、點讚、在看三聯。本文結合Pytorch官方教程、邱錫鵬老師的《神經網絡與深度學習》和李沐老師的《動手學深度學習》,為大家介紹的一下Pytorch深度學習框架。
  • 60分鐘入門深度學習工具PyTorch
    把numpy數組轉換為torch張量看看改變numpy數組如何自動改變torch張量。接下來我們用一些簡單的示例來看這個包:張量(Tensor)torch.Tensor是包的核心類。如果將其屬性.requires_grad設置為True,則會開始跟蹤其上的所有操作。完成計算後,您可以調用.backward並自動計算所有梯度。此張量的梯度將累積到.grad屬性中。