马拉松的英文翻译英语怎么说-女同性恋英语怎么说


2023年4月19日发(作者:查太莱夫人的情人)CNN中各层计算量MACCFLOPs的计算⽅式
注:
1. ReLU和Pool层计算FLOPs,⽽conv层、FC层、Depthwise-conv层计算MACC数;
2. 区分FLOPS和FLOPs的区别,
FLOPS:注意全⼤写,是floating point operations per second的缩写,意指每秒浮点运算次数,理解为计算速度。是⼀个衡
量硬件性能的指标。
FLOPs:注意s⼩写,是floating point operations的缩写(s表复数),意指浮点运算数,理解为计算量。可以⽤来衡量算法/
模型的复杂度。
正⽂:
⾸先,解释FLOPs和MACC,两者都是CNN计算量的表⽰⽅法,⼀个⽹络的总的计算量macc等于每⼀层的MACC或FLOPs累加。了
解模型速度的⼀种⽅法是简单计算它执⾏的计算量。我们通常将其视为s,每秒浮点运算。稍有不同的其他度量是MACC或,也称为
MADD。
以下为常⽤各层计算量计算⽅法(未编⼊则可忽略不计):春风杨柳万千条全诗
卷积层(convdeconv计算⽅式⼀样)
⼆维卷积层计算量公式为
MACC = K K Cin Hout Wout Cout
Hout Wout 对应输出特征图中的像素数⽬
K x K 卷积核的宽度和长度
Cin 输⼊通道数
Cout 是卷积核的数⽬,即输出的维度
池化层
全局池化(常⽤):
针对输⼊所有值进⾏⼀次池化操作,不论是max、sum还是avg,都只需要对每个值算⼀次。
FLOPs = Hin Win x Cin
Hin x Win表写春天的古诗有哪些 ⽰Pool层的输⼊特征图的⼤⼩;
Cin表⽰Pool层的输⼊通道数,即上⼀层的输出通道;
⼀般池化(不常⽤):
对于输出的每⼀个值,都是⼀次池化操作,每次池化操作的计算量就是池化过滤器参数的数量。
FLOPs = Hout Wout x Cout x K x K
Hout x Wout表⽰Pool层输出map的⼤⼩;
Cout表⽰Pool层的输出通道数;
K表⽰kernel⼤⼩。

深度可分离卷积(Depthwise-conv
MACC = Cin Hout Wout (K K + Cout)
具体参数意义与conv⼀致,请参考conv层。计算⽅式的原理如下:
⼀是⼀个普通的卷积的分解成两个较⼩的操作。它们总共占⽤更少的内存(更少的权重)并且速度更快。当然,这只是近似于“完整”卷积
层可以做的事情,因此您可能实际上需要更多这样的运算来获得相当于模型中原常规卷积层相同的表现⼒,但即便需要更多层,您这样做仍
然更快。
这些层在移动设备上运⾏良好,是MobileNet的基础,也是Xception等⼤型模型的。
第⼀个运算是卷积 convolution(深度卷积)。这在很多⽅⾯类似于常规卷积,除了我们没有组合输⼊通道。总是有相同数
深度depthwise
量的输⼊通道和输出通道。
深度卷积的MACC总数为:
K K C Hout Wout
这可以减少C倍⼯作量,使其⽐常规卷积层有效率。
⽰例:在112112特征图上使⽤输⼊通道为64的33核进⾏深度卷积,MACC:
3 3 64 112 112 = 7,225,344
请注意,此卷积始终具有与输⼊通道⼀样多的滤波器,并且每个滤波器仅应⽤于单个通道。这就是上述计算中没有 128的原因。
注意:有⼀个称为“深度通道乘数(depthwise channel multiplier)”的东西。如果此乘数⼤于1,则每个输⼊通道有D个输出通
道。因此,不是每个通道只有⼀个过滤器,现在每个通道都有D个过滤器。但深度乘数(depthwise multiplier)在实践中应⽤很少。
仅仅深度卷积是不够的,我们还需要添加“可分离(separable)”。第⼆个运算是常规卷积,但始终使⽤内核⼤⼩11,也称为“逐点
(pointwise)”卷积。
对于这个逐点卷积层,MACC的数量是:
Cin Hout Wout Cout
因为K = 1。
⽰例:让我们从深度卷积中获取具有11211264特征图的输出,并将其投影到128维中以创建新的112112128特征图。那么
MACC:
64 112 112 128 = 102,760,448
如您所见,逐点卷积⽐深度卷积贵很多倍。但是,如果我们将它们组合在⼀起,则MACC的总数远少于常规的33卷积:
33 depthwise : 7,225,344
11 pointwise : 102,760,448
depthwise separable : 109,985,792 MACCs
regular 33 co想念一个人短句有内涵 nvolution: 924,844,032 MACCs
常规卷积的计算量⼤概是深度可分离卷积8.4倍!
现在,⽐较这两种层有点不公平,因为常规的33卷积更具表现⼒:它可以计算更多感兴趣的东西。但是以相同的成本,你可以使⽤8倍以
上这样的深度可分离层,或者给它们有更多的过滤器。
深度可分层的总MACC是:
(K K Cin Hout Wout) + (Cin Hout Wout Cout)

这简化为:
Cin Hout Wout (K K + Cout)
如果将其与常规卷积层的公式进⾏⽐较,您会发现唯⼀的区别是我们最初 Cout在此处所做的事情+ Cout。做加法⽽不是乘法会产⽣很⼤
的影响......
激活层
ReLU/PReLU/ELU
FLOPs = H x W x C
H x W表⽰ReLU输⼊或输出(输⼊和输出相同)的map的⼤⼩;
C表⽰ReLU的通道数。
Sigmoid
FLOPs = H x W x C x 4
参数具体意义与ReLU相同。
全连接层
MACC = 2 x Cin + 1 x Cout
Cin表述输⼊通道数;
Cout表⽰输出通道数。
BN
推理过程(测试阶段)可与Conv层合并,故可忽略MACC计算。具体原理为:
批量标准化获取层的输出,并将以下公式应⽤于每个输出值:
z = gamma * (y - mean) / sqrt(variance + epsilon) + beta
这y是前⼀层输出特征图中的元素。我们⾸先通过减去输出通道的mean并除以标准偏差来标准化该值(epsilon⽤于确保我们不除以0,它
通常是这样的0.001)。然后我们按⽐例缩放gamma并添加偏差或偏移量beta。
每个通道有它⾃⼰的gamma,beta,mean,和variance的值,因此,如果在卷积层有C个输出通道,则该批量标准化层学习到C4个参
数。看起来有相当多的FLOPS,因为上⾯的公式应⽤于输出特征图中的每个元素。
然⽽......通常批量标准化应⽤于卷积层的输出但⾮线性(ReLU)之前。在这种情况下,我们可以做⼀些数学运算来使批量标准化层消失!

由于在全连接层中进⾏的卷积或矩阵乘法只是山行斜读xia还是读xie 最新规定 ⼀组点积,这是⼀个,并且上⾯给出的批量标准化公式也是线性变换,我们可以将这两个公式
组合成⼀个单⼀运算。换句话说,我们可以将批量标准化层的学习参数“折叠”到前⼀个卷舜发于畎亩之中拼音版 积/全连接层的权重中。
将批量标准参数折叠成前⾯层的权重的数学计算是相当简单的。在上⾯的公式中,y表⽰来⾃前⼀层的单个输出值。让我们扩展y:
z = gamma * ((x[0]*w[0] + x[1]*w[1] + ... + x[n-1]*w[n-1] + b) - mean) / sqrt(variance + epsilon) + beta
像往常⼀样,这是⼀个点积,来⾃卷积核或来⾃矩阵乘法。像往常⼀样,x意味着输⼊数据,w是该层的权重,并且b是该层的偏置值。
为了折叠批量标准化参数到上⼀层,我们要改写这个公式,这样gamma,beta,mean,并且variance只应⽤于w和b,没有x。

w_new[i] = w[i] * gamma / sqrt(variance + epsilon)
b_new = (b - mean) * gamma / sqrt(variance + epsilon) + beta
这⾥w_new[i]是新的第i个权重,b_new是偏置的新值。
从现在开始,我们可以将这些值⽤于卷积或全连接层的权重。我们现在可以写了:
z = x[0]*w_new[0] + x[1]*w_new[1] + ... + x[n-1]*w_new[n-1] + b_new
这给出了与以前完全相同的结果,但⽆需使⽤批量标准化层。替换上述公式中w_new和b_new,并简化。您应该再次获得原始批量标准化公
式。
请注意,紧跟batchnorm的层通常本⾝没有偏置b,因为batchnorm层已经提供了⼀个(beta)。在这种情况下,公式b_new变得更简单
(我们设置b为0):
b_new = beta - mean * gamma / sqrt(variance + epsilon)
因此,即使原始层没有偏置,⽆论如何都会得到⼀个折叠的批量标准化层。
简⽽⾔之:我们可以完全忽略批量标准化层的影响,因为我们在进⾏推理时实际上将其从模型中删除。
注意:此技巧仅在层的顺序为:卷积,批量标准化,ReLU时才有效 - 但不适⽤于:卷积,ReLU,批量标准化。ReLU是⼀个⾮线性
操作,它会把数据弄乱。(虽然我认为如果批量标准化后⾯紧跟⼀个新的卷积层,你可以反过来折叠参数。⽆论如何,你的深度学习初中诗词大全100首
库已经为你做了这些优化。)


aborting是害怕的近义词是什么 什么意思rting在线翻译读音例-onion


更多推荐

Macc是什么意思c在线翻译读音例句