
程式畫面是意圖,非文中所述線性迴歸程式碼。
【為什麼我們要挑選這篇文章】PyTorch 是一個開源的 Python 機器學習庫,可進行 NumPy 的張量運算,應用於自然語言處理等人工智慧領域。在數據分析中,簡單縣性迴歸(SLR)是最基本的分析技術,學會用 PyTorch 處理簡單線性迴歸,算是拿到了機器學習領域的基礎門票。(責任編輯:郭家宏)
「《科技報橘》徵才中!跟我們一起定位台灣產業創新力 >> 詳細職缺訊息
快將你的履歷自傳寄至 [email protected]」
PyTorch 深度學習框架庫之一,是來自 Facebook 的開源深度學習平台,提供研究原型到生產部署的無縫銜接。
本文旨在介紹 PyTorch 基礎部分,幫助新手在 4 分鐘內實現 python PyTorch 程式碼的初步編寫。
下文出現的所有功能函數,均可以在中文文檔中查看具體參數和實現細節,先附上 pytorch 中文文檔連結。
進入 PyTorch coding 前的準備工作
需要在電腦上安裝 Python 包,導入一些科學計算包,如:numpy 等。最最重要的,別忘記導入 PyTorch,下文的運行結果均是在 jupyter notebook 上得到的,感興趣的讀者可以自行下載 Anaconda,裡面自帶有 jupyter notebook。(註:Anaconda 支持 python 多個版本的虛擬編譯環境,jupyter notebook 是一個 web 形式的編譯界面,將代碼分割成一個個的 cell,可以實時看到運行結果,使用起來非常方便!)
軟體的配置和安裝部分,網上有很多教程,這裡不再贅述,紙上得來終覺淺,絶知此事要躬行。讓我們直接進入 PyTorch 的世界,開始 coding 吧!
拿到數據分析領域的最基礎門票,更要掌握未來十年 AI 發展最重要趨勢。
8/10 跟著科技報橘一起 CONNECT 台灣 to the Future!
超佛心 65 折雙人套票開賣啦!
Tensors 運算
Tensor 張量類型,是神經網路框架中重要的基礎數據類型,可以簡單理解為一個包含單個數據類型元素的多維矩陣,Tensor 之間透過運算進行連接,從而形成計算圖。
下面的程式碼實例中,創建了一個 2 x 3 的二維張量 x,指定數據類型為浮點型(Float):
運行結果:
PyTorch 包含許多關於 Tensors 的數學運算。除此之外,它還提供了許多實用程式,如高效序列化 Tensor 和其他任意數據類型,以及其他有用的實用程式。
下面是 Tensor 的加法/減法的一個例子,其中 torch.ones(*sizes, out=None) → Tensor 返回一個全為 1 的張量,形狀由可變參數 sizes 定義。在實例中,和變數 x 相加的,是建立兩個相應位置值為 1 的 2 x 3 的張量,相當於 x 每一維度的值 +2。程式碼和運行結果如下所示:
運行結果:
同樣的,PyTorch 也支持減法操作,實例如下。在上面的運行結果基礎上,每一維度再減去 2,x 恢復到最初的值。
運行結果:
其他 PyTorch 運算,讀者可以查閲上文給出的中文連結。
PyTorch 與 NumPy 的轉換
用戶可以輕鬆地在 PyTorch 和 NumPy 之間來回轉換。
下面是將 np.matrix 轉換為 PyTorch,並將維度更改為單個列的簡單示範:
運行結果:
其中@為張量乘法的重載運算符,x 為 2 x 3 的張量,值為 [[1,2,3],[4,5,6]],與轉換成 tensor 的 z 相乘,z 的大小是 3 x 2,結果為 2 x 2 的張量。(與矩陣乘法類似,不明白運行結果的讀者,可以看下矩陣的乘法運算)
除此外,PyTorch 也支持張量結構的重構 reshape。下面是將張量 x 重構成 1 x 6 的一維張量的實例,與 numpy 中的 reshape 功能類似。
運行結果:
GitHub repo 概述了 PyTorch 到 numpy的轉換。此為連結。
CPU and GPUs
PyTorch 允許變數使用 torch.cuda.device 上下文管理器動態更改設備。以下是示範程式碼:
運行結果:
PyTorch Variables
變數支是一個包裹著 Tensor 的薄層,它支持幾乎所有由 Tensor 定義的 API,變數被巧妙地定義為自動編譯包的一部分。它提供了實現任意標量值函數自動區分的類和函數。
以下是 PyTorch 變數用法的簡單示範,將 v1 和 v2 相乘的結果賦值給 v3,其中裡面的參數 requires_grad 的屬性默認為 False,若一個節點 requires_grad 被設置為 True,那麼所有依賴它的節點的 requires_grad 都為 True,主要用於梯度的計算。
運行結果:
運行結果:
Back Propagation
反向傳播算法可以計算,相對於輸入權重和偏差的損失梯度,以在下一次優化疊代中更新權重並最終減少損失,PyTorch 在分層定義對於變數的反向方法以執行反向傳播方面非常智慧。
以下是一個簡單的反向傳播計算方法,以 sin(x)為例計算微分:
運行結果:
對於 PyTorch 中的變數和梯度計算,可參考這篇文章。
SLR: Simple Linear Regression
現在我們瞭解了基礎知識,可以開始運用 PyTorch 解決簡單的機器學習問題——簡單線性回歸。我們將透過 4 個簡單步驟完成:
第一步
在步驟 1 中,我們建立一個由方程式 y = wx + b 產生的人工數據集,並注入隨機誤差。請參閱以下範例:
第二步
在第 2 步中,我們使用 forward 函數定義一個簡單的類 Linear Regression Model,使用 torch.nn.Linear 定義建構子以對輸入數據進行線性轉換:
torch.nn.Linear 參考網站。
第三步
下一步:使用 MSELoss 作為代價函數,SGD 作為優化器來訓練模型。
運行結果:
第四步
現在訓練已經完成,讓我們直觀地檢查我們的模型:
運行結果:
現在你已經完成了 PyTorch 的第一個線性迴歸例子的程式了,對於後續希望百尺竿頭,更進一步的讀者來說,可以參考 PyTorch 的官方文檔連結,完成大部分的編碼應用。
連結傳送門
(本文經合作夥伴 大數據文摘 授權轉載,並同意 TechOrange 編寫導讀與修訂標題,原文標題為〈PyTorch的4分钟教程,手把手教你完成线性回归〉。首圖來源:Pixabay CC Licensed)
更多關於 PyTorch、Python 的實用技能
史上最完整 PyTorch 資源來了!工程師不能錯過的中文教程、精選書單全在這
PyTorch 深度學習入門推薦!清楚的 PPT 講解,讓你 5 天就上手
Netflix 幕後最大功臣是 Python!工程師: 每個數據工具都靠 Python 建構