是否可以根据 Theano 中参数的符号定义一个采用不同形式的函数

Is it possible to define a function that takes a different form based on the sign of the parameter in Theano

我需要定义以下函数。有可能在 Theano 中做吗?

更新:

为了澄清,我问的是定义一个可以采用上述形式的 theano 符号变量。我知道我可以定义 2 个单独的变量并根据 R 的值使用它们中的任何一个。我在这里的问题是可以定义一个采用上述形式的变量。原因是我需要获取该变量的梯度并将其用于其他变量,如果我可以使用单个符号变量定义它,它将大大简化我的解决方案。

更新 2:

建议的 lambda 解决方案不起作用。这不会生成以后可以与 Theano 一起使用的符号变量:

r = T.dscalar('r')
dd = lambda r: r + 1 if r > 0 else r - 1 

在不了解 Theano 细节的情况下,我记得将 if-else 语句转换为线性方程的一种方法是让 if 检查变量本身,将其设置为 01。然后,您可以执行以下操作:

sign = (R_t > 0) ## this is the part I don't know how exactly to do
(topEquation * sign) + (bottomEquation * (sign ^ 1))

这有很好的 属性 如果 sign1(或 True),bottomEquation 将被删除,乘以 1 ^ 1 或只是 0。同样,如果 sign0/False,则 topEquation 会退出。

请注意,虽然也许 Theano 可以帮助解决这个问题 - 它仍然会 评估 两个方程,因此这可能会带来效率问题(对于每个输入,它是 运行 两个方程,然后忽略其中一个)。