0

我的目标是按元素反转 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)

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

4

1 回答 1

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 以尝试捕获数值问题而无需求助于技巧,并且引发异常可能是比更改数学更清洁的方法。

于 2014-07-07T11:12:53.310 回答