Tôi quan tâm đến việc tính đạo hàm của một định thức ma trận sử dụng TensorFlow. Tôi có thể nhìn thấy từ thực nghiệm rằng TensorFlow đã không được thực hiện một phương pháp phân biệt thông qua một yếu tố quyết định:sự khác biệt định thức ma trận trong tensorflow
LookupError: No gradient defined for operation 'MatrixDeterminant'
(op type: MatrixDeterminant)
Một nghiên cứu thêm chút tiết lộ rằng nó thực sự có thể tính toán đạo hàm; xem ví dụ Jacobi's formula. Tôi xác định rằng để thực hiện điều này có nghĩa là phân biệt thông qua một quyết định mà tôi cần phải sử dụng các chức năng trang trí,
@tf.RegisterGradient("MatrixDeterminant")
def _sub_grad(op, grad):
...
Tuy nhiên, tôi không đủ quen thuộc với dòng chảy tensor để hiểu làm thế nào điều này có thể được thực hiện. Có ai có bất kỳ cái nhìn sâu sắc về vấn đề này?
Dưới đây là một ví dụ mà tôi chạy vào vấn đề này:
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)
Rất mát mẻ! vì một lý do nào đó các tài liệu trên tf đang gây ra vấn đề. ví dụ: từ các liên kết ở trên http://tensorflow.org/how_tos/adding_an_op/index.md#AUTOGENERATED-implement-the-gradient-in-python – Blaze
cố định, tài liệu được chuyển đến http://tensorflow.org/how_tos/ –