MATLAB深度學習CNN包計算次數統計

對一次前向訓練和反向傳導來說,主要計算了以下東西:

讀取6W組數據到內存中耗時:5.767000 seconds

初始化CNN耗時:0.001000 seconds

訓練60000組數據,每一組數據耗時:約0.05s

訓練一次耗時:train(0)time:3841.074000 seconds

加載,測試,訓練一次,然後測試的總時間totaltime:3894.932000 seconds

測試1W組測試集的時間:約50s,因此問題的重點在訓練時候的並行化處理。

分析一次訓練:

正向傳導:C1層:24X24X5X5X6X1=86400次乘法,24X24X1X6X(5X5-1)=82944次加法,計算sigmoid次數24X24X6=3456,旋轉卷積核的操作:5X5X6=150次次賦值操作

S2層:6X12X12=864次除法(除4),6X12X12X3=2592次加法

C3層:8X8X5X5X12X6=115200次乘法,8X8X12X6X(5X5-1)(卷積核卷積時的加法)+5X8X8X12(每一個卷積MAP都是由6個卷積核得到的6張MAP相加得到的,一共加5次)=114432次加法,計算sigmoid次數8X8X12=768,旋轉卷積核的操作:5X5X12X6=1800次賦值操作

S4層:4X4X12=192次除法,4X4X12X3=576次加法

輸出層: 10X192=1920次拉成向量操作,10次sigmoid操作,乘法操作10X192=1920次,加法操作:191X10=1910次

故一個數據前向傳導過程中乘法操作共203520次,加法操作共202464次,sigmoid操作共4234次,除法操作共1056次,一共411274次操作.

反向傳導:求輸出層的敏感度:10次操作

求S4層敏感度誤差:乘法操作:1920X4=7680次乘法操作,加法操作:1920X3=5760次加法操作.

求C3層敏感度誤差:8X8X12=768次上採樣賦值操作, 8X8X12=768相乘操作, 8X8X12=768次除四操作, 8X8X12=768次sigmoid求導數操作

求S2層敏感度誤差:乘法操作:5X5X12X12X12X6=259200次乘法操作,加法操作: (5X5-1)X12X12X12X6+5X12X12X12=247472次加法操作.

求C1層敏感度誤差:24X24X6=3456次上採樣賦值操作, 6X24X24=3456次相乘操作, 6X24X24=3456次除四操作, 6X24X24=3456次sigmoid求導數

乘法操作共:271104次,加法操作一共:253232次,其餘次數之和不超過一萬

更新權重:C1層權重更新:首先計算梯度:旋轉原始圖像,共賦值:28X28X6+24X24X6X1=8310次,共有乘法:24X24X1X6X5X5+5X5X1X6(更新梯度乘以學習率)+6(更新偏置b乘共享率)=86556次,加法:5X5X(24X24-1)X1X6+5X5X1X6+(5X5-1)*6+6(更新梯度)=86550次

C3層權重更新:首先計算梯度:旋轉原始圖像,共賦值:12X12X12+8X8X6X12=6336次,共有乘法:8X8X12X6X5X5+5X5X12X6(更新梯度乘以學習率)+12(更新偏置b乘共享率)=117012次,加法:5X5X(8X8-1)X12X6+5X5X12X6+(5X5-1)*6+12(更新梯度)=115336次

輸出層權重更新: 10X192=1920次拉成向量操作,192X2X10約4000次乘法操作和2000次減法運算

因此得出結論,一次訓練中,耗時間的是卷積操作,一次訓練計算總次數爲:1376312次,這個次數CPU完全能應付的了,完全不需要OPENCL加速.

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章