матричный определитель дифференцирования в тензорном потоке

Я заинтересован в вычислении производной определителя матрицы с использованием TensorFlow. Из экспериментов видно, что в TensorFlow не реализован метод дифференцирования по определителю:

LookupError: No gradient defined for operation 'MatrixDeterminant' 
(op type: MatrixDeterminant)

Небольшое дальнейшее исследование показало, что на самом деле можно вычислить производную; смотри напримерФормула Якоби, Я решил, что для реализации этого средства дифференциации через определитель мне нужно использовать функцию декоратор,

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

Ответы на вопрос(3)

Ваш ответ на вопрос