gpt4 book ai didi

python - T.gt() 有问题

转载 作者:行者123 更新时间:2023-12-01 04:35:44 25 4
gpt4 key购买 nike

为了获得T.gt()的用法,我写了一个玩具代码。

def f(data):
# return T.gt(data, 0)
if T.gt(data, 0):
print "1"
return -data
else:
print "2"
return data


a = T.scalar()
t = f(a)

print t.eval({a:-4})

我预计当a=-4时返回值为-4,当a=4时返回值为-4,但它总是满足条件并运行返回-data。我不知道为什么。你能帮我吗?

最佳答案

T.gt 是一个符号函数;它不返回 bool 值,而是返回一个表示符号表达式的对象,该符号表达式在稍后编译和执行时将计算为 bool 值。

因此,在 Python 中,T.gt(...) 将始终被评估为 True,因为结果始终为非None >.

如果你想要 Theano 中的条件表达式,那么你需要使用符号条件运算。有两个:T.switch 和 theano.ifelse.ifelse。不同之处在于,T.switch 是逐元素操作,接受张量条件,而 ifelse 需要标量条件。

您的示例还有另一个问题。即使代码很好,它也总是会返回负值。从本质上讲,您的示例表示,如果输入为正,则返回其负数,否则按原样返回输入(已经为负)。我还建议使用 theano.function 而不是 eval 函数。

您的示例可以更改为说明 ifelse 的工作原理,如下所示:

import theano
import theano.ifelse
import theano.tensor as T


def symbolic_f(x):
return theano.ifelse.ifelse(T.gt(x, 0), -x - 1, x + 1)


def main():
x = T.scalar()
f = theano.function(inputs=[x], outputs=symbolic_f(x))

print f(-4)
print f(4)


main()

关于python - T.gt() 有问题,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/31757952/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com