Je voudrais calculer le premier et le second dérivés (partie diagonale de hessois) de ma perte déterminée par rapport à chaque carte de caractéristique d'un vgg16 le noyau de la couche conv4_3 qui est une matrice dimensionnelle 3x3x512x512. Je sais comment calculer des dérivés si elle est respectée à un rang inférieur selon How to compute all second derivatives (only the diagonal of the Hessian matrix) in Tensorflow? Cependant, quand il se tourne vers un rang supérieur, je me suis perdu complet.tensorflow: Compute Hessien (seule partie diagonale) par rapport à un tenseur de rang élevé
# Inspecting variables under Ipython notebook
In : Loss
Out : <tf.Tensor 'local/total_losses:0' shape=() dtype=float32>
In : conv4_3_kernel.get_shape()
Out : TensorShape([Dimension(3), Dimension(3), Dimension(512), Dimension(512)])
## Compute derivatives
Grad = tf.compute_gradients(Loss, conv4_3_kernel)
Hessian = tf.compute_gradients(Grad, conv4_3_kernel)
In : Grad
Out : [<tf.Tensor 'gradients/vgg/conv4_3/Conv2D_grad/Conv2DBackpropFilter:0' shape=(3, 3, 512, 512) dtype=float32>]
In : Hessian
Out : [<tf.Tensor 'gradients_2/vgg/conv4_3/Conv2D_grad/Conv2DBackpropFilter:0' shape=(3, 3, 512, 512) dtype=float32>]
S'il vous plaît aidez-moi à vérifier mes compréhensions. Ainsi, pour conv4_3_kernel
, chaque cage obscure pour [Kx, Ky, in_channels, out_channels], de sorte que Grad
devrait être dérivées partielles de Loss
par rapport à l'élément (pixel) dans l'chacune des cartes de fonction. Et Hessian
est la deuxième dérivés.
Mais, Hessian
calcule tous les dérivés, comment puis-je calculer que seule la partie diagonale? devrais-je utiliser tf.diag_part()
? Merci d'avance!
Merci Yaroslav! – Xer
J'ai utilisé 'tf.gradients' pour calculer des dérivées, mais il donne toujours' None' à chaque fois qu'il est différencié par rapport à une variable spécifiée. par exemple, 'Grad = tf.gradients (Loss, conv4_3_kernel)' puis 'Hessian0' = tf.gradients (Grad [..., 0], conv4_3_kernel [..., 0])' donne 'None' pour tous les 512 dims. Ai-je tort quelque part? – Xer
De votre réponse dans [link] (http://stackoverflow.com/questions/38200982/how-to-compute-all-second-derivatives-only-the-diagonal-of-the-hessian-matrix), j'ai enfin réalisé mon problème était ma perte ne dépend pas de «tranche» op. J'ai donc besoin de reconstruire ma perte avec les variables tf.pack-ed. Merci beaucoup encore! – Xer