我的目标是反转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
迭代元素并单独检查它们是否可以反转,但我希望我的代码看起来尽可能的数学。
答案 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以尝试捕获数值问题而不需要使用技巧,并且提出异常可能比更改数学更简洁。