मेरे पास हानि मूल्य/फ़ंक्शन है और मैं टेंसर f (आकार n) के संबंध में सभी दूसरे डेरिवेटिव की गणना करना चाहता हूं। मैं tf.gradients दो बार का उपयोग करने में कामयाब रहे, लेकिन जब यह दूसरी बार के लिए आवेदन, यह योग पहला इनपुट भर में डेरिवेटिव (second_derivatives मेरी कोड में देखें)।कैसे Tensorflow में सभी दूसरे डेरिवेटिव (हेस्सियन मैट्रिक्स के केवल विकर्ण) की गणना करने के?
इसके अलावा, मैं हेस्सियन मैट्रिक्स पुनः प्राप्त करने में कामयाब रहे, लेकिन मैं केवल अपने विकर्ण गणना करने के लिए अतिरिक्त गणना से बचने के लिए चाहते हैं।
import tensorflow as tf
import numpy as np
f = tf.Variable(np.array([[1., 2., 0]]).T)
loss = tf.reduce_prod(f ** 2 - 3 * f + 1)
first_derivatives = tf.gradients(loss, f)[0]
second_derivatives = tf.gradients(first_derivatives, f)[0]
hessian = [tf.gradients(first_derivatives[i,0], f)[0][:,0] for i in range(3)]
model = tf.initialize_all_variables()
with tf.Session() as sess:
sess.run(model)
print "\nloss\n", sess.run(loss)
print "\nloss'\n", sess.run(first_derivatives)
print "\nloss''\n", sess.run(second_derivatives)
hessian_value = np.array(map(list, sess.run(hessian)))
print "\nHessian\n", hessian_value
मेरे सोच है कि tf.gradients (first_derivatives, च [0, 0]) [0] सम्मान के साथ दूसरा व्युत्पन्न उदाहरण के लिए पुनः प्राप्त करने के f_0 करने के लिए काम होता था, लेकिन यह है कि tensorflow नहीं है लगता है एक टेंसर के टुकड़े से निकलने की अनुमति दें।
आपके उत्तर के लिए टैंक, दुर्भाग्य से यह वास्तव में क्योंकि मैं करूंगा मदद नहीं करता है हेसियन के केवल विकर्ण को पुनः प्राप्त करना चाहते हैं। मैंने एक्स [0], एक्स [1] के साथ पैक का उपयोग करने की कोशिश की ... लेकिन यह अभी भी मुझे एक त्रुटि देता है। –
'hess0 = tf.gradients ([grads [0]], [x]); hess1 = tf.gradients ([grads [1]], [y]) 'केवल विकर्ण प्रविष्टियों परिकलित किया जाएगा –
धन्यवाद, मैं अंत में इसे का उपयोग क्या आप पिछले जवाब दिया और tf.pack करने के लिए) में कामयाब (! –