gpt4 book ai didi

python - theano T.switch() : if tensor is empty strange behaviour

转载 作者:行者123 更新时间:2023-11-28 17:29:37 29 4
gpt4 key购买 nike

我想检查向量 A 是否为空:返回 [0] 否则:返回 A

import theano
import theano.tensor as T

A = T.ivector()

out = T.switch( T.eq(A.size, 0), [0], A )

f = theano.function([A], out)

print f([1])
print f([])

这打印:

[ 1 ]
[]

条件语句本身起作用,它只在 A 为空时返回 1。

最佳答案

这是因为theano.tensor.switch operates differently to theano.ifelse.ifelse .

theano.tensor.switch 按元素操作。这三个参数需要具有相同的形状,或者可以广播为相同的形状。 T.eq(A.size, 0) 将始终是标量和真值,[0] 是具有单个元素的向量,因此两者都将被广播到A 的形状。 A == [] 的情况无疑是奇怪的,我不知道它是否是设计使然; Theano 似乎是将标量和单项向量“广播”到空向量。

解决方案是切换到theano.ifelse.ifelse:

A = tt.ivector()
out = theano.ifelse.ifelse(
tt.eq(A.size, 0), tt.unbroadcast(tt.zeros((1,), dtype=A.dtype), 0), A)
f = theano.function([A], out)
print f([])
print f([1])
print f([1, 2])

根据需要,打印

[0]
[1]
[1 2]

请注意,两个可能的 ifelse 输出值(比较为真时的值和比较为假时的值)必须具有相同的类型,因此构造零向量的复杂方法是单个条目。

关于python - theano T.switch() : if tensor is empty strange behaviour,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/35394514/

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