【深智書摘】同時搞定TensorFlow、PyTorch

【深智書摘】同時搞定TensorFlow、PyTorch

更新於 發佈於 閱讀時間約 5 分鐘
raw-image

TensorFlow、PyTorch 是目前佔有率最高的深度學習框架,初學者常會問『應該選擇PyTorch或 TensorFlow套件』,依個人看法,PyTorch、TensorFlow好比倚天劍與屠龍刀,各有擅場,兩個套件的發展重點有所不同,例如在偵錯方面,PyTorch比較容易,但TensorFlow/Keras建模、訓練、預測都只要一行程式,另外,物件偵測主流演算法YOLO,第四版以TensorFlow開發,第五版則以PyTorch開發,若我們只懂TensorFlow,那就無法使用最新版了。

差異比較

PyTorch 認為兩個主要對手,『TensorFlow 1.x版把簡單的事情複雜化』,『Keras把複雜的事情太過簡化』,因而促使TensorFlow 2.x版依據Keras規格重新開發並納入TensorFlow中,現在Keras已變成TensorFlow最重要的模組。

而PyTorch特色如下:

1. Python First:PyTorch開發團隊認為Python及相關套件功能已經相當強大,不須另外發明輪子(Reinvent the wheel),直接與Python生態環境緊密結合。

2. 除錯容易:TensorFlow/Keras 提供 fit 一行指令即可進行模型訓練,雖然簡單,但不易偵錯(Debug),PyTorch須自行撰寫優化求解的程序,雖然繁瑣,但在過程中可插入任意的程式碼偵錯或查看預測結果、損失函數變化,不必等到模型訓練完成。

3. GPU 記憶體管理較佳,筆者使用GTX1050Ti,記憶體只有4GB 時,同時執行2個以TensorFlow 開發的Notebook 檔案時,常會發生記憶體不足的狀況,但使用PyTorch,即使3、4 個Notebook 檔案也沒有問題。

4. 程式可自行決定變數及模型要在 CPU 或 GPU 運算:雖然比較麻煩,但可優化記憶體的使用,TensorFlow則是自行偵測GPU,如果有。則預設會使用GPU運算,反之,會使用CPU。

另外,文件說明還是以TensorFlow/Keras較為詳盡,且較有系統性,PyTorch方面,筆者常須依靠谷大哥搜尋,這也是筆者撰寫PyTorch入門書籍的原因。

一致的學習路徑

雖然存在以上差異,PyTorch與TensorFlow基本設計概念是相通的,採用相同的approach,可以一併學會兩個套件。

梯度下降法是神經網路主要求解的方法,計算過程會使用張量 (Tensor) 運算,另外,在反向傳導的過程中,則要進行偏微分,計算梯度,如下圖:

圖一. 神經網路求解過程

圖一. 神經網路求解過程

基於上述求解過程的需求,大多數的深度學習套件至少會具備下列功能:

1. 張量運算:包括各種向量、矩陣運算。

2. 自動微分 (Auto Differentiation):透過偏微分計算梯度。

3. 提供各種神經層 (Layers) 及神經網路 (Neural Network) 模型構建。

因此,學習的路徑可以從簡單的張量運算開始,再逐漸熟悉高階的神經層函數,以奠定扎實的基礎。

圖二. 神經網路學習路徑

圖二. 神經網路學習路徑

在上述學習路徑中,我們會發現TensorFlow/PyTorch基本設計概念是一致的:

1. TensorFlow/PyTorch張量 (Tensor) 均與NumPy陣列相容,不論是資料結構或是運算,包括 Broadcasting 機制。

2. 自動微分、梯度下降也是如此,只是語法不同而已。

3. 都支援順序型 (Sequential)、Functional API模型。

4. 均建議使用 Dataset/Data Loader 作為模型的資料來源。

►更詳盡的範例程式說明可參閱『同時搞定TensorFlow、PyTorch』。

《開發者傳授 PyTorch 秘笈》/ 陳昭明 著

《開發者傳授 PyTorch 秘笈》/ 陳昭明 著


本文節錄自深智數位出版之《開發者傳授 PyTorch 秘笈》。


avatar-img
深智數位的沙龍
9會員
25內容數
留言
avatar-img
留言分享你的想法!
深智數位的沙龍 的其他內容
在機器學習中,我們的目標是找到一種能夠最好地描述數據的模型。例如,在迴歸問題中,我們希望找到一種函數,該函數能以一種對我們的目標變數(例如:銷售量、股票價格等) 的最佳估計的方式,描述輸入特徵(例如:廣告支出、市場狀況等)。
  在程式設計中,變數(Variable)是一個代表內存位置的符號,用於存儲和操作數據。它是一個內存單元,可以存儲各種類型的數據,例如整數、浮點數、字符串等。變數的值可以在程式執行時改變,並在需要時被讀取。 變數是暫時存放資料用的,可以將變數想像成是一個箱子,箱子裡面可以是空的,
新手在使用ChatGPT 時,對於ChatGPT的回答普遍印象是廢話連篇,而這通常是因為沒有給出足夠清晰的指示所導致,以下將介紹3個讓你跟ChatGPT溝通更有效的提示技巧,幫助讀者快速掌握提升回答品質的秘訣!
在機器學習中,我們的目標是找到一種能夠最好地描述數據的模型。例如,在迴歸問題中,我們希望找到一種函數,該函數能以一種對我們的目標變數(例如:銷售量、股票價格等) 的最佳估計的方式,描述輸入特徵(例如:廣告支出、市場狀況等)。
  在程式設計中,變數(Variable)是一個代表內存位置的符號,用於存儲和操作數據。它是一個內存單元,可以存儲各種類型的數據,例如整數、浮點數、字符串等。變數的值可以在程式執行時改變,並在需要時被讀取。 變數是暫時存放資料用的,可以將變數想像成是一個箱子,箱子裡面可以是空的,
新手在使用ChatGPT 時,對於ChatGPT的回答普遍印象是廢話連篇,而這通常是因為沒有給出足夠清晰的指示所導致,以下將介紹3個讓你跟ChatGPT溝通更有效的提示技巧,幫助讀者快速掌握提升回答品質的秘訣!