0801-深度學習程序架構設計


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 更便捷。


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM