反转Theano张量元素

时间:2014-07-03 14:08:38

标签: python theano

我的目标是反转Theano张量元素中的值。例如,我想将[4, 5, 10]转换为[0.25, 0.2, 0.1]。如果存在零元素,我希望保持不变(例如,[0, 4, 5, 10]应该变为[0, 0.25, 0.2, 0.1])。这样做最优雅的方式是什么?

我的解决方案是为所有元素添加一个非常小的值:

v = t.vector()
result = 1 / (v + 0.000001)

我知道我可以使用scan迭代元素并单独检查它们是否可以反转,但我希望我的代码看起来尽可能的数学。

1 个答案:

答案 0 :(得分:1)

您可以使用T.sgn()来获取此信息,因为0的符号为0,但是对于非常非常小的值 0

,它可能仍然会失败

最小的例子

import numpy as np
import theano
from theano import tensor as T

X_values = np.arange(10).astype(theano.config.floatX)
X = T.shared(X_values, 'X')
Y = (X ** (-1 * abs(T.sgn(X)))) * abs(T.sgn(X))
print(Y.eval())

我认为user189所说的是数学上这不是真的正确 - 当分母接近0时,结果应该进入无穷大。你需要什么应用程序?您可以随时测试T.isinf和T.isnan以尝试捕获数值问题而不需要使用技巧,并且提出异常可能比更改数学更简洁。