您的位置:首页 > 编程语言 > MATLAB

MATLAB深度学习CNN包计算次数统计

2017-04-19 20:54 204 查看
对一次前向训练和反向传导来说,主要计算了以下东西:

读取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加速.
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息