Меня интересует вычисление производной матричного определителя с использованием TensorFlow. Я могу видеть из экспериментов, которые TensorFlow не реализовали метод дифференцирования через определитель:матричное детерминантное дифференцирование в тензорном потоке
LookupError: No gradient defined for operation 'MatrixDeterminant'
(op type: MatrixDeterminant)
Немного дальнейшее исследование показало, что на самом деле можно вычислить производную; см., например, Jacobi's formula. Я решил, что для того, чтобы осуществить это означает, дифференцироваться через определитель, что мне нужно использовать функцию декоратора,
@tf.RegisterGradient("MatrixDeterminant")
def _sub_grad(op, grad):
...
Однако, я не достаточно хорошо знаком с тензором потока, чтобы понять, как это может быть достигнуто. Кто-нибудь имеет представление об этом вопросе?
Вот пример, где я бегу в этот вопрос:
x = tf.Variable(tf.ones(shape=[1]))
y = tf.Variable(tf.ones(shape=[1]))
A = tf.reshape(
tf.pack([tf.sin(x), tf.zeros([1, ]), tf.zeros([1, ]), tf.cos(y)]), (2,2)
)
loss = tf.square(tf.matrix_determinant(A))
optimizer = tf.train.GradientDescentOptimizer(0.001)
train = optimizer.minimize(loss)
init = tf.initialize_all_variables()
sess = tf.Session()
sess.run(init)
for step in xrange(100):
sess.run(train)
print sess.run(x)
Очень круто! по какой-то причине документы по tf вызывают проблемы. например: из ссылок выше http://tensorflow.org/how_tos/adding_an_op/index.md#AUTOGENERATED-implement-the-gradient-in-python – Blaze
исправлено, документы перенесены на http://tensorflow.org/how_tos/ –