是否可以根据 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
检查变量本身,将其设置为 0
或 1
。然后,您可以执行以下操作:
sign = (R_t > 0) ## this is the part I don't know how exactly to do
(topEquation * sign) + (bottomEquation * (sign ^ 1))
这有很好的 属性 如果 sign
是 1
(或 True
),bottomEquation
将被删除,乘以 1 ^ 1
或只是 0
。同样,如果 sign
是 0
/False
,则 topEquation
会退出。
请注意,虽然也许 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
检查变量本身,将其设置为 0
或 1
。然后,您可以执行以下操作:
sign = (R_t > 0) ## this is the part I don't know how exactly to do
(topEquation * sign) + (bottomEquation * (sign ^ 1))
这有很好的 属性 如果 sign
是 1
(或 True
),bottomEquation
将被删除,乘以 1 ^ 1
或只是 0
。同样,如果 sign
是 0
/False
,则 topEquation
会退出。
请注意,虽然也许 Theano 可以帮助解决这个问题 - 它仍然会 评估 两个方程,因此这可能会带来效率问题(对于每个输入,它是 运行 两个方程,然后忽略其中一个)。