卷积层计算 feature maps 和中间结果内存访问次数
卷积层的输入是 224x224x3
,把所有这些值读出来需要访问 150,528
次内存。
如果卷积核是 KxKxCout
,还要乘上这个系数(因为每次卷积都要访问一遍)。
以 stride=2
, 卷积核个数为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
mac(memory access cost-内存使用量)
输入特征图宽*高*维度 + 输出特征图宽*高**维度 + 权重
input = Hin x Win x Cin output = Hout x Wout x Cout weights = K x K x Cin x Cout + Cout
例:shufflenet v2里的1*1mac计算:
本站文章如无特殊说明,均为本站原创,如若转载,请注明出处:卷积层计算 feature maps 和中间结果内存访问次数, mac(memory access cost-内存使用量)计算方法 - Python技术站