关于T.gt()的一些错误

2024-04-26 06:18:52 发布

您现在位置:Python中文网/ 问答频道 /正文

为了获得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,但它总是满足条件并运行返回数据。 我不知道为什么。你能帮助我吗?你知道吗


Tags: 数据代码gt用法datareturnifdef
1条回答
网友
1楼 · 发布于 2024-04-26 06:18:52

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

因此,在Python中,T.gt(...)将始终被计算为True,因为结果总是非None。你知道吗

如果要在Theano中使用条件表达式,则需要使用符号条件运算。有两种:T.switchtheano.ifelse.ifelse。区别在于T.switch是一个元素操作,接受张量条件,而ifelse需要标量条件。你知道吗

你的例子还有一个问题。即使代码是好的,它也总是返回负值。实际上,您的示例是这样的,如果输入为正,则返回其负,否则按原样返回输入(已经为负)。我还建议在eval函数上使用theano.function。你知道吗

您的示例可以更改为演示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()

相关问题 更多 >