为什么使用logistic sigmoid的tanh定义比scipy的expit快?

2024-05-19 08:10:38 发布

您现在位置:Python中文网/ 问答频道 /正文

我用的是逻辑乙状结肠。我比较了使用scipy.special函数expit与使用sigmoid的双曲正切定义的时间。在

我发现双曲正切的速度是原来的3倍。这是怎么回事?我还测试了一个排序数组的时间,看看结果是否有任何不同。在

下面是一个在IPython中运行的示例:

In [1]: from scipy.special import expit

In [2]: myexpit = lambda x: 0.5*tanh(0.5*x) + 0.5

In [3]: x = randn(100000)

In [4]: allclose(expit(x), myexpit(x))
Out[4]: True

In [5]: timeit expit(x)
100 loops, best of 3: 15.2 ms per loop

In [6]: timeit myexpit(x)
100 loops, best of 3: 4.94 ms per loop

In [7]: y = sort(x)

In [8]: timeit expit(y)
100 loops, best of 3: 15.3 ms per loop

In [9]: timeit myexpit(y)
100 loops, best of 3: 4.37 ms per loop

编辑:

机器信息:

  • Ubuntu 16.04
  • 内存:7.4 GB
  • 英特尔酷睿i7-3517U CPU@1.90GHz×4

数字/快照信息:

^{pr2}$

Tags: ofinloop信息时间scipy双曲ms
2条回答

编辑:

我会把未来的人介绍给this question。在


总结有用意见的结果:

"Why is using tanh definition of logistic sigmoid faster than scipy's expit?"

答:不是这样;在我的特定机器上,tanh和{}C函数有一些有趣的事情在进行。在

在我的机器上,tanh的C函数比exp快。对于为什么会出现这种情况,答案显然属于另一个问题。当我运行下面列出的C++代码时,我看到

tanh: 5.22203
exp: 14.9393

这与从Python调用时tanh函数的~3倍增长相匹配。奇怪的是,当我在具有相同操作系统的单独机器上运行相同的代码时,tanh和{}的计时结果相似。在

^{pr2}$

实际上我认为你的分析是不正确的。我在我的机器上观察到类似的问题,我认为这是由scipy expit定义中的if引起的。在Exp上面运行脚本比C++更快速。但是运行python代码片段时,使用tanh over expit的速度提高了3倍。在

相关问题 更多 >

    热门问题