我用的是逻辑乙状结肠。我比较了使用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
机器信息:
数字/快照信息:
^{pr2}$
编辑:
我会把未来的人介绍给this question。在
总结有用意见的结果:
答:不是这样;在我的特定机器上,}C函数有一些有趣的事情在进行。在
tanh
和{在我的机器上,
tanh
的C函数比exp
快。对于为什么会出现这种情况,答案显然属于另一个问题。当我运行下面列出的C++代码时,我看到这与从Python调用时}的计时结果相似。在
^{pr2}$tanh
函数的~3倍增长相匹配。奇怪的是,当我在具有相同操作系统的单独机器上运行相同的代码时,tanh
和{实际上我认为你的分析是不正确的。我在我的机器上观察到类似的问题,我认为这是由scipy expit定义中的
if
引起的。在Exp上面运行脚本比C++更快速。但是运行python代码片段时,使用tanh over expit的速度提高了3倍。在相关问题 更多 >
编程相关推荐