2016-03-19 10 views
0

私はtheano共分散行列を持っています。私はそれを要素の賢明な正方形で計算しようとしています。私はそれが簡単です知っているtheano matrixのelementwise square

TypeError: ('Bad input argument to theano function with name "cov.py:114" at index 0(0-based)', 'Expected an array-like object, but found a Variable: maybe you are trying to call a function on a (possibly shared) variable instead of a numeric array?') 

COVのように計算された共分散行列であり、
import theano 
    a, b = theano.tensor.matrices('a', 'b') 
    square = theano.function([a, b], a * b) 
    sq = square(cov, cov) 

y1_pre = T.dot(self.x, self.W_left) + self.b_left 
    y1 = activation(y1_pre, self.hidden_activation) 
    y2_pre = T.dot(self.x, self.W_right) + self.b_right 
    y2 = activation(y2_pre, self.hidden_activation) 
    y1_mean = T.mean(y1, axis=0) 
    y1_centered = y1 - y1_mean 
    y2_mean = T.mean(y2, axis=0) 
    y2_centered = y2 - y2_mean 
    cov = T.sum(y1_centered[:, :, None] * y2_centered[:, None, :], axis=0) 

しかし、それはエラー以下投げている私は同じのためのコード、次の書かれていますしかし、それでも可能な修正を見つけることができませんでした。この点で私を助けてください。

+0

「cov」とは何ですか? – JeD

+0

theano共分散行列 – Shweta

+0

'sq = square(cov [:]、cov [:])'を使ってみましたか?私はassanoの行列はnumpy配列のように振る舞う? – JeD

答えて

1

あなたがコンパイルしたTheano関数への入力は、記号式ではありません。NumPy配列または共有変数でなければなりません。たとえば、次のように

A = T.matrix('input matrix') 
B = T.matrix('dummy matrix') 
C = np.random.rand(5,5).astype(theano.config.floatX) 
squared = A**2 
get_squared = theano.function([A], squared) 

私は、次のコマンドを実行している場合:私は実行する場合は

TypeError: ('Bad input argument to theano function with name ":1" at index 0(0-based)', 'Expected an array-like object, but found a Variable: maybe you are trying to call a function on a (possibly shared) variable instead of a numeric array?')

get_squared(B) 

は、私は次のエラーを取得します

get_squared(C) 

を私は行列を元に戻します。

私はあなたのコードベースがどのように構造化されているか分かりませんが、非常に直接的な(おそらく純粋だがうまくいく)ソリューションは、自乗した共分散行列のシンボリックな表現を作成し、 Y1およびY2は、COVを計算するために、グラフの一部である場合たとえば、あなたは共分散を返しますtheano関数を作成することができ乗:

cov = ... # (some expressions involving y1 and y2 as in your original post) 
get_cov_squared = theano.function([y1,y2], cov**2) 

しかし、再び、機能へのご入力は、実際の配列または共有変数でなければなりませんが、象徴的な表現ではありません。

+0

素晴らしい説明のためにインディーありがとう!!!しかし、私はtheanoへの初心者であり、それはまだ私のために騒がしくないです。私はコードベースについていくつか考えを与えるために私のコードを更新しました – Shweta