Я пытаюсь построить функцию 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?
Спасибо! Если кому-то нужна дополнительная информация, документация будет [здесь] (http://deeplearning.net/software/theano/library/tensor/basic.html?highlight=stacklists#theano.tensor.stacklists). –
Дополнительный вопрос: кто-нибудь знает, имеет ли Tensorflow соответствующую функцию? Я огляделся, но ничего не могу найти. Я спрашиваю, потому что я хотел бы использовать эту функцию в Keras, будь то бэкэнд - Theano или TF. –