0801-深度學習程式架構設計
pytorch完整教程目錄:https://www.cnblogs.com/nickchen121/p/14662511.html
前幾章已經把 pytorch 的大部分基礎知識講的很詳細了,足夠我們未來的使用,但是如果你想更加詳細的瞭解 pytorch 的使用方法,推薦去閱讀 pytorch 的官方文件, 而不是去看其他作者寫的書籍或者部落格,因為所有人的文章都不過是對官方文件做了自己的見解罷了。
接下來我們將給大家講解一個又一個專案實戰,但是本章的重點還不是帶你去使用 pytorch 的介面,去構建一個花裡胡哨的專案,更多的是帶你去了解一個程式的架構,也就是說這一章將會帶領同學們去合理地設計程式的結構,讓你們的程式更具可讀性、更易用。
一、程式架構設計
學習某個深度學習框架時,掌握它的基本知識和介面雖然重要,但是如何合理地組織程式碼,讓程式碼具有良好的可讀性和擴充套件性也是很重要的。為此,本章更多的是講解經驗性的東西,又因為這些經驗涉及的更多是個人喜好和程式碼風格,這種喜好每個人應該都是不一樣的,為此在參考這些經驗時可以把它當做是一種參考或提議。
在做深度學習實驗和專案時,為了得到最優的模型結果,中間往往需要很多次的嘗試和修改。但是如果能夠合理地組織檔案結構,以及使用一些小技巧可以極大地提高程式碼的易讀易用性。根據作者的經驗,在大多數深度學習的專案研究時,程式都需要實現以下幾個功能:
- 模型定義
- 資料處理和載入
- 訓練模型(Train & Validate)
- 訓練過程視覺化
- 測試(Test/Inference)
除了上述所說的,程式應該還要滿足以下幾個要求:
- 模型需要具有高度可配置型,方便修改引數、修改模型和反覆實驗
- 程式碼需要具有良好的組織結構,讓人一目瞭然
- 程式碼應該要有良好的說明,讓他人能夠了解
二、檔案組織結構
前面提到過程式的主要功能,其中最重要的三個功能如下:
- 模型定義
- 資料載入
- 訓練和測試
首先來看程式檔案的組織結構:
checkpoints/
data/
__init__.py
dataset.py
get_data.sh
models/
__init__.py
AlexNet.py
BasicModule.py
ResNet34.py
utils/
__init__.py
visualize.py
config.py
main.py
requirement.txt
README.md
上式各個檔案的主要內容和作用如下:
- checkpoints/:用於儲存訓練好的模型,可讓程式在異常退出後仍然能夠重新載入模型,恢復訓練
- data/:資料相關操作,包括資料預處理、dataset 實現等
- models/:模型定義,可以有多個模型,例如上面的 AlexNet 和 ResNet34,一個模型對應一個檔案
- utils/:可能用到的工具函式,本次實驗中主要封裝了視覺化工具
- config.py:配置檔案,所有可配置的變數都集中在此,並提供預設值
- main.py:主檔案,訓練和測試程式的入口,可通過不同的命令來指定不同的操作和引數
- requirements.txt:程式依賴的第三方庫
- README.md:提供程式的必要說明
三、關於 __init__.py
想詳細瞭解 __init__.py
的同學們可以參考這篇部落格:https://www.cnblogs.com/nickchen121/p/10804427.html
可以看到幾乎每個資料夾下都有 init 這個檔案,一個目錄中如果包含了 init 檔案,那麼它就變成了一個包。init 可以為包,也可以定義包的屬性和方法,但是它必須存在,因為其他程式才能從這個目錄中匯入相應的模組或函式。
例如在 data 資料夾下有 init 檔案,在 main 中就可以 from data.dataset import DogCat
。如果在 data 中的 init 中寫入 from .dataset import DogCat
,則可以在 main 中就可以直接寫成 from data import DogCat
,或者 import data; dataset = data.DogCat
,比寫為 from data.dataset import DogCat
更便捷。