如何在theano中獲取tensor的boolean值?

我的代碼是這樣的:

import theano.tensor as T

from theano import function

a = T.scalar(a)

b = T.scalar(b)

if T.switch(T.eq(a, b), a, b):

c = a + b

else:

c = a - b

f = function([a, b], c)

print f(2, 2)

print f(2, 3)

按邏輯應該分別輸出4和-1, 實際輸出的卻是4和5,也就是不管a是否等於b, if條件的值都是真,這是為什麼啊


問題中的用法不太正確。

Theano接近函數式語言(functional programming),你的if只會在編譯時起作用。也就是說,如果在編譯時T.switch(T.eq(a, b), a, b)結果為True,接下來始終會執行c = a + b。

正確的用法參見Theano.Conditions。在你的例子中應該是:

z_switch = T.switch(T.eq(a, b), a+b, a-b) # 定義一個switch
f_switch = theano.function([a, b], z_switch,
mode=theano.Mode(linker=vm)) # 建立switch調用函數
print f_switch(a, b) # 調用

另外此類問題建議在Theano-user (Google 網上論壇) 上問。


推薦閱讀:

TAG:Python | 機器學習 | 神經網路 |