2016-10-30 50 views
0

我正在尋找一種方法來編寫一個函數,該函數需要兩個theano表達式ab並對它們進行元素操作(比如說加法),以便dimensions(a + b) = dimensions(a) + dimenisons(b)在theano中的操作總是增加尺寸

在我的情況下,a將有一個維度和b將有兩個或三個。

我正在考慮做類似a.dimshuffle('x', 'x', 0) + a.dimshuffle(0, 1, 'x')的二維b,但我不知道如何獲得它的維數。 b.shape是theano表達式,不支持len()。的這個

結束目標是計算從在多個點折線的距離,該技術將被使用多次,其中a將有形狀和(number_of_control_points,)b將是2D或3D網格的採樣點的座標在我將正在評估距離。

我可以在不計算表達式的情況下將表達式的維數作爲常規python值嗎?

替代問題:有沒有一種方法可以在沒有明確的dimshuffle的情況下直接執行操作?

回答

1

使用tile帶着幾分廣播法寶:

import theano as th 
import theano.tensor as T 

def general_outer(elem_op, a, b): 
    a_shape = T.shape(a) 
    b_shape = T.shape(b) 
    return elem_op(T.tile(a, T.join(0,T.ones_like(a_shape),b_shape), b)) #note the broadcast