2016-05-05 4 views
5

Я хочу создать матрицу вращения в тензорном потоке, где все ее части являются тензорами.Как создать матрицу вращения в тензорном потоке

Что у меня есть:

def rotate(tf, points, theta): 
    rotation_matrix = [[tf.cos(theta), -tf.sin(theta)], 
         [tf.sin(theta), tf.cos(theta)]] 
    return tf.matmul(points, rotation_matrix) 

Но это говорит о том, что rotation_matrix список тензоров вместо одного самого тензора. theta также является тензорным объектом, который передается во время выполнения.

ответ

5

с двумя операциями:

def rotate(tf, points, theta): 
    rotation_matrix = tf.pack([tf.cos(theta), 
           -tf.sin(theta), 
           tf.sin(theta), 
           tf.cos(theta)]) 
    rotation_matrix = tf.reshape(rotation_matrix, (2,2)) 
    return tf.matmul(points, rotation_matrix) 
+0

Это хорошее решение! –

+0

Я рассматривал это, но потом забыл. Я думаю, что это более красноречиво, чем то, что я сейчас делаю. – dtracers

+1

'tf.pack' был переименован в' tf.stack', см. Https://github.com/tensorflow/tensorflow/issues/7550 – Hooked

0

является вариант, я обнаружил, что работает, чтобы использовать пакет, но если есть лучший способ, пожалуйста, отправить ответ:

def rotate(tf, points, theta): 
    top = tf.pack([tf.cos(theta), -tf.sin(theta)]) 
    bottom = tf.pack([tf.sin(theta), tf.cos(theta)]) 
    rotation_matrix = tf.pack([top, bottom]) 
    return tf.matmul(points, rotation_matrix) 
1

Чтобы ответить на вопрос " Как построить матрицу вращения », следующее более чистое, чем требуемое несколько вызовов pack (stack):

tf.stack([(tf.cos(angle), -tf.sin(angle)), (tf.sin(angle), tf.cos(angle))], axis=0) 
Смежные вопросы