卷積神經網路源碼
Ⅰ PyTorch 源碼解讀之 BN & SyncBN:BN 與 多卡同步 BN 詳解
BatchNorm原理
BatchNorm最早在全連接網路中提出,旨在對每個神經元的輸入進行歸一化操作。在卷積神經網路(CNN)中,這一原理被擴展為對每個卷積核的輸入進行歸一化,即在channel維度之外的所有維度上進行歸一化。BatchNorm帶來的優勢包括提高網路的收斂速度、穩定訓練過程、減少過擬合現象等。
BatchNorm的數學表達式為公式[1],引入縮放因子γ和移位因子β,作者在文章中解釋了它們的作用。
PyTorch中與BatchNorm相關的類主要位於torch.nn.moles.batchnorm模塊中,包括如下的類:_NormBase、BatchNormNd。
具體實現細節如下:
_NormBase類定義了BN相關的一些屬性。
初始化過程。
模擬BN的forward過程。
running_mean、running_var的更新邏輯。
γ、β參數的更新方式。
BN在eval模式下的行為。
BatchNormNd類包括BatchNorm1d、BatchNorm2d、BatchNorm3d,它們的區別在於檢查輸入的合法性,BatchNorm1d接受2D或3D的輸入,BatchNorm2d接受4D的輸入,BatchNorm3d接受5D的輸入。
接著,介紹SyncBatchNorm的實現。
BN性能與batch size密切相關。在batch size較小的場景中,如檢測任務,內存佔用較高,單張顯卡難以處理較多圖片,導致BN效果不佳。SyncBatchNorm提供了解決方案,其原理是所有計算設備共享同一組BN參數,從而獲得全局統計量。
SyncBatchNorm在torch/nn/moles/batchnorm.py和torch/nn/moles/_functions.py中實現,前者負責輸入合法性檢查以及參數設置,後者負責單卡統計量計算和進程間通信。
SyncBatchNorm的forward過程。
復習方差計算方式。
單卡計算均值、方差,進行歸一化處理。
同步所有卡的數據,得到全局均值mean_all和逆標准差invstd_all,計算全局統計量。
接著,介紹SyncBatchNorm的backward過程。
在backward過程中,需要在BN前後進行進程間通信。這在_functions.SyncBatchNorm中實現。
計算weight、bias的梯度以及γ、β,進一步用於計算梯度。
Ⅱ 【Python圖像分類系列】建立CNN模型實現貓狗圖像分類(案例+源碼)
Python圖像分類系列:CNN模型實現貓狗識別(案例+源碼概覽)
這篇文章是第275篇關於Python圖像分類的原創內容,著重講解了如何使用CNN(卷積神經網路)在Keras框架下進行貓狗圖像的識別任務。
在實踐中,我們首先對數據進行了預處理。利用ImageDataGenerator,將圖形文件轉化為150x150的RGB張量,並配合二進制標簽,生成的批量格式為(20,)。這個生成器會不斷從目標文件夾中抽取並循環處理圖像。
接著,構建了CNN模型,具體結構未在文中詳述,但重點在於利用fit_generator方法進行模型擬合,通過設置steps_per_epoch參數來控制每個訓練周期的數據量。模型的詳細代碼和配置可在源碼中查看。
模型的性能評估部分展示了acc和loss曲線,這些曲線可以用來判斷模型的性能和過擬合程度。
總結來說,通過這些步驟,我們成功地構建了一個CNN模型來區分貓和狗的圖像,並通過實驗得出模型的過擬合情況。作者擁有豐富的科研背景,發表過SCI論文,目前專注於數據演算法研究,定期分享Python、機器學習等相關知識,致力於以簡單易懂的方式分享技術內容。想了解更多細節和源碼的朋友,可通過鏈接獲取。