A. PyTorch源碼學習 - (13)模型的保存與載入
PyTorch中模型的保存與載入主要通過torch.save和torch.load兩個核心函數實現。以下是具體細節:
模型的保存:
- 核心函數:torch.save。
- 輔助函數:使用torch._opener,torch._open_zipfile_writer,torch._open_zipfile_writer_file,torch._open_zipfile_writer_buffer等函數操作文件和流,根據文件或內存緩沖區創建流容器進行對象的保存。
- 封裝過程:torch._save封裝了文件的打開和寫入過程,而torch._open_file_like和torch._open_file用於管理文件句柄,torch._open_buffer_writer則封裝了二進制流的寫入。
模型的載入:
- 核心函數:torch.load。
- 實現細節:通過torch._open_zipfile_reader讀取文件,並使用torch._weights_only_unpickler作為定製的反序列化器,確保安全載入模型權重。
- 恢復位置管理:torch._get_restore_location和torch.default_restore_location用於獲取和設置恢復位置,支持在多設備或分布式環境下的模型載入。
python與C++的結合:
- 綁定工具:使用PyBind11實現C++和Python介面的綁定。
- 類型定義:torch/_C/ __init__.pyi用於定義Python中類型信息的模板。
- JIT編譯:torch/csrc/jit/python/init.cpp實現JIT編譯系統,將C++類對象綁定到Python環境,實現高效的動態編譯。
- 管理C++對象:Python負責管理C++對象的生命周期、調用C++方法,以及處理Python層面的邏輯和介面定義。
通過上述機制,PyTorch確保了模型的高效持久化與靈活載入,為深度學習模型的開發與部署提供了堅實的底層支持。
B. Python語言學習(二):CNN神經網路(CPU與GPU訓練)
本文深入探索PyTorch的CNN神經網路在手寫數字識別中的應用。MNIST數據集,包含了6萬張訓練圖片和1萬張測試圖片,每張圖片為28×28像素的0至9的手寫數字,黑色背景,白色數字。
首先,導入所需程序庫。
接著,下載並載入MNIST數據集。
構建卷積神經網路分為三步:初始化方法`__init__`、前向傳播方法`forward`。
定義損失函數和優化器,隨後進行模型訓練。
模型訓練通過迭代調整參數,以減小損失函數,提升模型性能。
完成訓練後,使用模型進行手寫數字識別。
文章最後介紹GPU訓練方法,包括檢查GPU設備、將模型和數據送至GPU進行訓練和測試。
附上GPU版完整代碼,供讀者參考。
以上內容詳盡介紹了從導入庫、數據載入、模型構建、訓練、測試直至GPU加速訓練的全過程,旨在為讀者提供一個全面的CNN神經網路實踐指南。