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)