2016-02-05 16 views
30

Tính năng tôi theo sau là để có thể biết được độ dốc của một biến nhất định liên quan đến chức năng lỗi của tôi cho một số dữ liệu. Một cách để thực hiện điều này là xem có bao nhiêu biến đã thay đổi sau khi cuộc gọi được huấn luyện, nhưng rõ ràng là có thể thay đổi một cách ồ ạt dựa trên thuật toán học tập (ví dụ như hầu như không thể nói với một thứ như RProp)) và không phải là rất sạch sẽ.Làm cách nào để có được độ dốc của sự mất mát ở biến TensorFlow?

Xin cảm ơn trước.

+0

hiện các giải pháp cho việc câu hỏi của bạn còn nếu tôi muốn xem/kiểm tra gradient là tiến trình đào tạo? – Pinocchio

Trả lời

42

Chức năng tf.gradients() cho phép bạn tính toán độ dốc biểu tượng của một tensor đối với một hoặc nhiều tensors khác — bao gồm các biến. Hãy xem xét các ví dụ đơn giản sau:

data = tf.placeholder(tf.float32) 
var = tf.Variable(...)    # Must be a tf.float32 or tf.float64 variable. 
loss = some_function_of(var, data) # some_function_of() returns a `Tensor`. 

var_grad = tf.gradients(loss, [var])[0] 

Sau đó bạn có thể sử dụng độ dốc biểu tượng này để tính toán gradient số cho một số dữ liệu cụ thể:

sess = tf.Session() 

var_grad_val = sess.run(var_grad, feed_dict={data: ...}) 
+3

Điều gì sẽ xảy ra nếu bạn muốn sử dụng gradient cùng với thuật toán đào tạo được xây dựng sẵn như 'GradientDescentOptimizer' hoặc 'AdagradOptimizer'? Tôi muốn tránh phải tính toán độ dốc của mạng hai lần. – gideonite

+5

Lớp 'tf.train.GradientDescentOptimizer' (và các lớp' Optimizer' có liên quan) gọi 'tf.gradients()' nội bộ. Nếu bạn muốn truy cập các gradient được tính cho trình tối ưu hóa, bạn có thể gọi 'optimizer.compute_gradients()' và 'optimizer.apply_gradients()' theo cách thủ công, thay vì gọi 'optimizer.minimize()'. – mrry

+2

@ mrry: Chỉ cần làm rõ mặc dù, 'symbolic' gradient ở đây chỉ là một tensor chưa được đánh giá và không phải là gradient biểu tượng thực tế, tức là symgrad (x^2) = 2 * x. Có cách nào để có được điều này mà không cần nhìn vào tensorboard? – bge0

Các vấn đề liên quan