2016-12-28 8 views
0

私は、オイラー角のT.vectorを入力として受け取り、それらのオイラー角に対応する方向ベクトルを返すTheano関数を構築しようとしています。まず、ベクトルの各要素の正弦と余弦をとり、これらを回転行列に配置します。最後に、方向ベクトル[1, 0, 0]にこの回転行列を掛けます。私が実行している問題は、このNumPy配列に回転行列を掛けることができないということです。入力の個々の要素を使用するTheano関数

これは私のコードです:

import theano.tensor as T 
import theano 
import numpy as np 

euler_angles = T.vector('euler_angles', dtype=theano.config.floatX) 
origin_vec = theano.shared(np.asarray([1, 0, 0], 
             dtype=theano.config.floatX)) 
sinx = T.sin(euler_angles[0]) 
siny = T.sin(euler_angles[1]) 
sinz = T.sin(euler_angles[2]) 
cosx = T.cos(euler_angles[0]) 
cosy = T.cos(euler_angles[1]) 
cosz = T.cos(euler_angles[2]) 

# Create the rotation matrix 
rot_matrix = np.asarray([ 
     [cosy*cosz, -1*sinz, cosz * siny], 
     [(sinx*siny)+(cosx*cosy*sinz), cosx*cosz, (-1*cosy*sinx)+(cosx*siny*sinz)], 
     [(-1*cosx*siny)+(cosy*sinx*sinz), cosz*sinx, (cosx*cosy)+(sinx*siny*sinz)] 
    ]) 
vector = T.dot(origin_vec, rot_matrix) 
get_vector = theano.function([euler_angles], vector) 

最後から2番目の行は、このエラーがスローされます。

AsTensorError: ('Cannot convert [[Elemwise{mul,no_inplace}.0 Elemwise{mul,no_inplace}.0\n Elemwise{mul,no_inplace}.0]\n [Elemwise{add,no_inplace}.0 Elemwise{mul,no_inplace}.0\n Elemwise{add,no_inplace}.0]\n [Elemwise{add,no_inplace}.0 Elemwise{mul,no_inplace}.0\n Elemwise{add,no_inplace}.0]] to TensorType', <type 'numpy.ndarray'>) 

私は行列演算によって、この回転行列を作成するために、どのような方法を考えることはできませんオイラー角で。どのように私はTheanoがコンパイルできる形式でこの関数を作成できますか?

答えて

1

theano.tensor.stacklists()を使用してください。

rot_matrix = T.stacklists([[...], ...]) 
+0

ありがとうございます!誰かがもっと情報を必要とするなら、ドキュメンテーションは[here](http://deeplearning.net/software/theano/library/tensor/basic.html?highlight=stacklists#theano.tensor.stacklists)です。 –

+0

追加の質問:Tensorflowに対応する機能があるかどうかは誰にも分かりますか?私は周りを見回しましたが、私は何かを見つけることができません。バックエンドがTheanoであろうとTFであろうと、この機能をKerasで使用できるようにしたいと思っています。 –

関連する問題