2016-12-28 4 views
0

Я пытаюсь построить функцию Anano, которая принимает входные углы Эйлера в качестве входных данных и возвращает вектор направленности, соответствующий этим углам Эйлера. Во-первых, я беру синусы и косинусы каждого элемента вектора, а затем упорядочиваю их в матрицу вращения. Наконец, я умножаю вектор направления [1, 0, 0] на эту матрицу вращения. Проблема, с которой я сталкиваюсь, заключается в том, что я не могу умножить этот массив NumPy на матрицу вращения.Функция Anano с использованием отдельных элементов ввода

Это мой код:

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) 

Второй к последней строке выдает эту ошибку:

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'>) 

Я не могу думать о какой-либо способ создать эту матрицу вращения с помощью матричных операций на углах Эйлера. Как создать эту функцию в формате, который может собрать Anano?

ответ

1

использование theano.tensor.stacklists().

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

Спасибо! Если кому-то нужна дополнительная информация, документация будет [здесь] (http://deeplearning.net/software/theano/library/tensor/basic.html?highlight=stacklists#theano.tensor.stacklists). –

+0

Дополнительный вопрос: кто-нибудь знает, имеет ли Tensorflow соответствующую функцию? Я огляделся, но ничего не могу найти. Я спрашиваю, потому что я хотел бы использовать эту функцию в Keras, будь то бэкэнд - Theano или TF. –