Ich interessiere mich für die Berechnung der Ableitung einer Matrix Determinante mit TensorFlow. I kann von Experimenten, dass TensorFlow ein Verfahren zum Differenzieren durch eine Determinante nicht umgesetzt hat:Matrix-Determinant-Differenzierung im Tensorflow
LookupError: No gradient defined for operation 'MatrixDeterminant'
(op type: MatrixDeterminant)
Etwas weiter Untersuchung ergab, dass es tatsächlich möglich ist, die Ableitung zu berechnen; siehe zum Beispiel Jacobi's formula. Ich festgestellt, dass, um dies zu implementieren bedeutet durch eine Determinante der Unterscheidung, die ich brauche die Funktion Dekorateur zu verwenden,
@tf.RegisterGradient("MatrixDeterminant")
def _sub_grad(op, grad):
...
Aber ich bin nicht vertraut genug mit Tensor Fluss zu verstehen, wie dies erreicht werden kann. Hat jemand einen Einblick in diese Angelegenheit?
Hier ist ein Beispiel, wo ich in dieser Frage führen:
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)
Sehr cool! Aus irgendeinem Grund verursachen die Dokumente auf tf Probleme. zB: von den Links oben http://tensorflow.org/how_tos/adding_an_op/index.md#AUTOGENERATED-implement-the-gradient-in-python – Blaze
fixiert ist, bewegt docs zu http://tensorflow.org/how_tos/ –