卷积层的输入是 224x224x3
,把所有这些值读出来需要访问 150,528
次内存。
如果卷积核是 KxKxCout
,还要乘上这个系数(因为每次卷积都要访问一遍)。
拿 stride=2
, kernel
数为32的情况来说,输出的 feature map 尺寸为 112x112x32
,共计 401,408
次内存访问。
所以,每层的内存访问总数如下:
简单理解为卷积的总计算量需要存储,输出的结果需要存储,权重需要存储。
input = Hin x Win x Cin x K x K x Cout output = Hout x Wout x Cout weights = K x K x Cin x Cout + Cout ,
例:
input = 224 x 224 x 3 x 3 x 3 x 32 = 43,352,064 output = 112 x 112 x 32 = 401,408 weights = 3 x 3 x 3 x 32 + 32 = 896 total = 43,754,368
加深时,Hin
Win
会越来越小,但通道数会变得很大 ,weights 部分也会变得很大:
input = 28 x 28 x 256 x 3 x 3 x 512 = 924,844,032 output = 28 x 28 x 512 = 401,408 weights = 3 x 3 x 256 x 512 + 512 = 1,180,160 total = 926,425,600
卷积层计算 feature maps 和中间结果所占用内存量, mac计算方法
原文:https://www.cnblogs.com/ywheunji/p/12554998.html