首页 > 解决方案 > Adaptive_avg_pool2d 的计算 FLOPs

问题描述

在对抗 Adaptive_avg_pool2d 的翻牌时,我发现了几个 FLOP 的定义:

  1. fvcore,它将 FLOPs 定义为
1 * prod(input)

即 , 1 x N x C_in x H_in x W_in

  1. 另一个定义是从输出的角度。我从这里找到了一个:

它首先计算内核大小,例如 (kx, ky)

然后计算翻牌为

( kx*xy +1 ) * prod(output)

也就是说,(k_x x k_y + 1) x (N x C_out x H_out x W_out)

哪个定义是正确的?有计算 FLOPs 的资料吗?

标签: machine-learningpytorchconv-neural-network

解决方案


请参阅此问题此答案以了解其torch.nn.Adaptive{Avg, Max}Pool{1, 2, 3}d工作原理。

本质上,它试图减少池内核的重叠(这不是 的情况torch.nn.{Avg, Max}Pool{1, 2, 3}d),尝试只遍历每个输入元素一次(不确定是否成功,但可能是)。

FLOPS 指的是每秒的浮动操作,因此,如果每个输入浮点值被“触摸”(按输入的每个分组部分的最大值或平均值)只有一次它等于:

1 * prod(input)

要从此值获得 FLOPS,您必须将其除以通过1 * prod(input)浮点运算所需的时间。

第二个公式似乎对池化是正确的,而不是自适应的。


推荐阅读