當前位置: 華文星空 > 知識

純Python實作Torch API,康奈爾副教授為自己的課程建立了DIY教學庫

2021-12-13知識
該計畫是為紐約校區 Cornell Tech 的「機器學習工程」課程開發的。

機器之心報道,編輯:杜偉。

近日,機器之心在 GitHub 上發現了一個 DIY 教學庫——MiniTorch,該庫適用於希望了解深度學習(DL)系統底層實質概念的機器學習工程師。

MiniTorch 是一個 Torch API 的純 Python 重新實作,展示了從零開始構建一個張量和自動微分庫。最終得到的庫能夠執行 Torch 程式碼。

計畫地址:https:// github.com/minitorch/mi nitorch

計畫建立者為康奈爾大學副教授(pre-tenure)Alexander Rush,該計畫是為紐約校區 Cornell Tech 的「機器學習工程」課程開發的。這是一門碩士課程,涵蓋了訓練、調整、偵錯、視覺化和部署 ML 系統中的系統級問題。

在開始構建庫之前,使用者首先需要根據 Setup 的步驟建立自己的工作區域(workspace)。

Setup 地址:https:// minitorch.github.io/set up

然後,按照如下順序建立必要的模組:

模組 0:Fundamental模組 1:Autodiff模組 2:Tensors模組 3:Efficiency模組 4:Networks

計畫需要極少的計算資源。使用者可在 GitHub 上找到模組啟動程式碼,並且每個模組都從前面的模組中獲得增益。

模組 0:Fundamentals

Fundamentals 一個入門模組,主要介紹了幾種用於之後模組中測試和偵錯的核心技術,也涵蓋了一些基礎的數學基礎。使用者在這個模組中將開始構建 MiniTorch 的一些基礎設施。

所有的啟動程式碼可見:https:// github.com/minitorch/Mo dule-0

此外,每個模組有一組指南(Guides)來幫助完成這些任務。

模組 1:Autodiff

Autodiff 是在模組 0 的基礎上構建的,向使用者展示了如何僅使用純量(scalar)值來建立 MiniTorch 的第一個版本(mini-MiniTorch),涵蓋了系統中的關鍵技術——自動微分。然後,使用者即可以使用程式碼訓練一個原始模型。

所有的啟動程式碼可見:https:// github.com/minitorch/Mo dule-1

開始前,記得首先要啟用自己的虛擬環境,然後 clone 配置:

模組 2:Tensors

現在已經有了一個圍繞純量構建的完全開發的自動微分系統。但是,該系統在訓練期間效率低下。每個純量值需要構建一個物件,並且每個操作需要儲存之前建立的所有值的圖。訓練需要重復上述操作,執行線性模型等模型需要對網路中的每個項進行 for 迴圈。

Tensors 模組引入和實作的一個張量(tensor)物件可以解決這些問題。張量將很多重復的操作組合在一起,以節省 Python 開銷並將組合後的操作傳遞給更快的實作。

所有啟動器程式碼可見:https:// github.com/minitorch/Mo dule-2

開始前,使用者依然首先要啟用虛擬環境,然後 clone 配置:

模組 3:Efficiency

除了有助於簡化程式碼之外,張量還為加速計算提供了基礎。事實上,它們確實是使用 Python 等慢速語言高效編寫深度學習程式碼的唯一方法。然而,到目前為止,我們所做的一切都沒有比基本面更快。該模組專註於利用張量編寫快速程式碼,首先在標準 CPU 上,然後使用 GPU。

所有啟動器程式碼可見:https:// github.com/minitorch/Mo dule-3

同模組 1 和模組 2 一樣,使用者需要首先啟用虛擬環境,然後 clone 配置:

模組 4:Networks

我們現在擁有一個功能齊全的深度學習庫,具有像 Torch 這樣的真實工業系統的大部份功能。為了利用這項艱苦的工作,該模組完全基於使用軟體框架。特別是,我們將構建一個影像辨識系統。我們將透過為 MNIST 上的 LeNet 版本構建基礎架構來實作這一點:用於數位辨識的經典摺積神經網路 (CNN),以及用於 NLP 情感分類的 1D conv。

所有啟動器程式碼可見:https:// github.com/minitorch/Mo dule-4

使用者依然需要啟用虛擬環境,並 clone 配置:

此外,使用者還需要安裝和下載一個 MNIST 庫。註意,Mac OS 使用者可能需要安裝 wget 來執行. sh 檔。

這樣會在模組中添加一個 data / 目錄。使用者可以嘗試用以下程式碼對安裝進行測試: