Ваша проблема связана не с tf.convert_to_tensor
, а с тем фактом, что вы пытаетесь вычислить некоторые градиенты, которых не существует. У вас есть эти два заполнителя:
x = tf.placeholder(tf.float32, shape=[None])
op = tf.placeholder(tf.float32, shape=[None, 3])
И затем вы пытаетесь получить следующие градиенты:
gradmulx_op = tf.gradients(op[:, 0], x)
gradmuly_op = tf.gradients(op[:, 0], y)
Чтобы эти градиенты существовали (то есть не были None
), значение op[:, 0]
должно быть результатом одной или нескольких дифференцируемых операций с использованием x
и y
. Например, если op
было определено как:
op = tf.stack([2 * x + 3 * y, x - 1, 2 * y + 2], axis=1)
, тогда это будет работать, потому что op[:, 0]
будет вычисляться из x
и y
(и, возможно, других значений), поэтому существует градиент между тензорами. Или, другими словами, изменение x
или y
изменяет значение op[:, 0]
. TensorFlow отслеживает операции, используемые для вычисления каждого значения, и использует эту информацию для автоматического вычисления градиентов.
Но op
не вычисляется из x
и y
, фактически оно не вычисляется из что угодно, поскольку это заполнитель, это просто заданное значение. Изменение x
или y
не влечет за собой изменение op
. Таким образом, между этими тензорами нет градиентов. Я не уверен, чего вы пытаетесь достичь с помощью своего кода, но вам, вероятно, нужно переосмыслить, какой именно результат вы хотите вычислить.