2016-11-03 14 views
0

Theanoはインデックス割り当てをサポートしていません。わかりましたが、そこテナント変数の単一要素へのインデックス割り当て値

theano.tensor.set_subtensor(x,y) 

であり、それはあなたが[5]、B =または[5] + = bのような何かをしたい場合は、theano.tensorを参照してくださいstated

ということです。以下のset_subtensor()およびtheano.tensor.inc_subtensor()を参照してください。

したがって、set_subtensorはインデックス割り当て操作をシミュレートしますか?まあ、そうではありません。 set_subtensorは、次の例に示すように、ndimsが<のときに期待どおりに動作するように見えます。

>>> a = theano.tensor.zeros(10) 
>>> a.eval() 
array([ 0., 0., 0., 0., 0., 0., 0., 0., 0., 0.], dtype=float32) 
>>> aa = theano.tensor.set_subtensor(a[5], 5.0) 
>>> aa.eval() 
array([ 0., 0., 0., 0., 0., 5., 0., 0., 0., 0.], dtype=float32) 

クール、a.shape == aa.shape、[5] = 5.0のは、より暗くなるとそれを試してみましょう複製する= AAを設定することができます。

>>> b = theano.tensor.zeros((5,5)) 
>>> b.eval() 
array([[ 0., 0., 0., 0., 0.], 
     [ 0., 0., 0., 0., 0.], 
     [ 0., 0., 0., 0., 0.], 
     [ 0., 0., 0., 0., 0.], 
     [ 0., 0., 0., 0., 0.]], dtype=float32) 
>>> bb = theano.tensor.set_subtensor(b[2][2], 5.0) 
>>> bb.eval() 
array([ 0., 0., 5., 0., 0.], dtype=float32) 
>>> bb.shape.eval() 
array([5]) 

set_subtensorがターゲットインデックスで指定された値を割り当てましたが、それは全体の更新テンソル変数が、更新された値を持つだけでサブテンソルを返しません。

ndims> = 2のtheano tensorsの単一要素に値を割り当てる方法を知っている人はいますか?

答えて

0

把握できました。 ndims> = 2でテンソル内の単一の要素に値をインデックス・アサインするには、dimsの上に更新された値を持つサブセンサーを再帰的にset_subtensorする必要があるようです。たとえば:= 3

>>> c = theano.tensor.zeros((2,2,2)) 
>>> c.eval() 
array([[[ 0., 0.], 
     [ 0., 0.]], 

     [[ 0., 0.], 
     [ 0., 0.]]], dtype=float32) 
>>> ccc = theano.tensor.set_subtensor(c[0][0][0], 5.0) 
>>> ccc.eval() 
array([ 5., 0.], dtype=float32) 
>>> cc = theano.tensor.set_subtensor(c[0][0], ccc) 
>>> cc.eval() 
array([[ 5., 0.], 
     [ 0., 0.]], dtype=float32) 
>>> c = theano.tensor.set_subtensor(c[0], cc) 
>>> c.eval() 
array([[[ 5., 0.], 
     [ 0., 0.]], 

     [[ 0., 0.], 
     [ 0., 0.]]], dtype=float32) 

ndimsで

>>> b = theano.tensor.zeros((5,5)) 
>>> b.eval() 
array([[ 0., 0., 0., 0., 0.], 
     [ 0., 0., 0., 0., 0.], 
     [ 0., 0., 0., 0., 0.], 
     [ 0., 0., 0., 0., 0.], 
     [ 0., 0., 0., 0., 0.]], dtype=float32) 
>>> bb = theano.tensor.set_subtensor(b[2][2], 5.0) 
>>> bb.eval() 
array([ 0., 0., 5., 0., 0.], dtype=float32) 
>>> b = theano.tensor.set_subtensor(b[2], bb) 
>>> b.eval() 
array([[ 0., 0., 0., 0., 0.], 
     [ 0., 0., 0., 0., 0.], 
     [ 0., 0., 5., 0., 0.], 
     [ 0., 0., 0., 0., 0.], 
     [ 0., 0., 0., 0., 0.]], dtype=float32) 

は多分インデックス割り当てにシンプルな/迅速な方法がありますが、これは私が見つけたものです。

関連する問題