Sono interessato a calcolare la derivata di una matrice determinante utilizzando TensorFlow. Posso vedere dalla sperimentazione che tensorflow non ha implementato un metodo di differenziazione attraverso un determinante:differenziazione della matrice determinante in tensorflow
LookupError: No gradient defined for operation 'MatrixDeterminant'
(op type: MatrixDeterminant)
Poco un'ulteriore indagine ha rivelato che in realtà è possibile calcolare la derivata; vedere ad esempio Jacobi's formula. Ho deciso che al fine di attuare questo mezzo di differenziazione attraverso un determinante che ho bisogno di utilizzare la funzione di decoratore,
@tf.RegisterGradient("MatrixDeterminant")
def _sub_grad(op, grad):
...
Tuttavia, non sono abbastanza familiarità con il flusso tensore per capire come questo possa essere realizzato. Qualcuno ha qualche idea in merito?
Ecco un esempio in cui mi imbatto in questo numero:
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)
Molto bello! per qualche motivo i documenti su TF stanno causando problemi. ad esempio: dai link sopra http://tensorflow.org/how_tos/adding_an_op/index.md#AUTOGENERATED-implement-the-gradient-in-python – Blaze
corretti, i documenti sono stati spostati su http://tensorflow.org/how_tos/ –