我想计算LeNet-5(paper)的每一层需要多少个触发器。有些论文总共给出了其他架构的POPs(1,2,3),但是这些论文没有提供有关如何计算FLOP数量的详细信息,我也不知道非线性激活函数需要多少FLOP。 。例如,要计算 tanh(x)
,需要多少FLOP?
我想这将是实现,并且可能还取决于硬件。但是,我主要对获得一个数量级感兴趣。我们是在谈论10个FLOP吗? 100跳? 1000拍?因此,选择您想要答案的任何体系结构/实现。 (尽管我很欣赏接近“常见”设置的答案,例如Intel i5/nvidia GPU/Tensorflow)
最佳答案
注意:这个答案不是特定于python的,但是我认为tanh之类的语言在各种语言上根本没有不同。
Tanh通常是通过定义一个上限和下限来实现的,分别为其返回1和-1。中间部分具有不同的功能,如下所示:
Interval 0 x_small x_medium x_large
tanh(x) | x | polynomial approx. | 1-(2/(1+exp(2x))) | 1
存在多项式,这些多项式在单精度浮点之前都是精确的,并且在 double 情况下也是如此。
该算法称为Cody-Waite算法。
引用this description(您也可以在此处找到有关数学的更多信息,例如,如何确定x_medium),
科迪和怀特的有理形式要求四个乘法,三个加法和一个精度的除法,以及七个乘法,六个加法和一个精度的双除法。
对于负数x,您可以计算| x |。并翻转标志。
因此,您需要比较间隔x处于哪个间隔,并评估相应的近似值。
总计:
现在,这是1993年的报告,但我认为这里并没有太大变化。
关于python - tanh需要几个FLOP?,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/41251698/