Je m'intéresse au calcul de la dérivée d'un déterminant matriciel en utilisant TensorFlow. Je peux voir d'expérimentation que tensorflow n'a pas mis en oeuvre un procédé de différenciation par l'intermédiaire d'un déterminant:Différenciation du déterminant matriciel dans le flux tensoriel
LookupError: No gradient defined for operation 'MatrixDeterminant'
(op type: MatrixDeterminant)
Un peu plus loin enquête a révélé qu'il est en fait possible de calculer la dérivée; Voir par exemple Jacobi's formula. Je résolus que pour mettre en œuvre ce moyen de différenciation par un déterminant que je dois utiliser le décorateur de fonction,
@tf.RegisterGradient("MatrixDeterminant")
def _sub_grad(op, grad):
...
Cependant, je ne suis pas assez familier avec le flux tenseur pour comprendre comment cela peut être accompli. Quelqu'un a-t-il un aperçu à ce sujet?
Voici un exemple où je cours dans ce numéro:
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)
Très cool! pour une raison quelconque, les docs sur tf causent des problèmes. par exemple: à partir des liens ci-dessus http://tensorflow.org/how_tos/adding_an_op/index.md#AUTOGENERATED-implement-the-gradient-in-python – Blaze
corrigé, les docs ont été déplacés vers http://tensorflow.org/how_tos/ –