Wie berechnet man alle zweiten Ableitungen (nur die Diagonale der hessischen Matrix) in Tensorflow?

8

Ich habe einen Verlust Wert / Funktion, und ich möchte alle zweiten Ableitungen in Bezug auf einen Tensor f (der Größe n) berechnen. Ich habe es geschafft, tf.gradients zweimal zu verwenden, aber wenn ich es zum zweiten Mal anwende, summiert es die Ableitungen über die erste Eingabe (siehe second_derivatives in meinem Code).

Ich habe es auch geschafft, die Hesse-Matrix zu erhalten, aber ich möchte nur ihre Diagonale berechnen, um zusätzliche Berechnungen zu vermeiden.

%Vor%

Mein Gedanke war, dass tf.gradients (first_derivatives, f [0, 0]) [0] funktionieren würde, um zum Beispiel die zweite Ableitung in Bezug auf f_0 zu erhalten, aber es scheint, dass Tensorflow nicht funktioniert. t erlauben, von einer Scheibe eines Tensors abzuleiten.

    
Clement T. 05.07.2016, 10:23
quelle

2 Antworten

2

Betrachten Sie nun die Hessians,

%Vor%

Ссылка

    
Dr.Raghnar 28.06.2017, 14:15
quelle
7

tf.gradients([f1,f2,f3],...) berechnet Steigung von f=f1+f2+f3 Auch das Unterscheiden in Bezug auf x[0] ist problematisch, weil x[0] sich auf einen neuen Slice -Knoten bezieht, der kein Vorfahre Ihres Verlustes ist, also wird es in Bezug auf diesen Verlust None sein. Du könntest es umgehen, indem du pack benutzt um x[0], x[1], ... zusammen in xx zu kleben und dein Verlust hängt von xx anstatt x ab. Eine Alternative besteht darin, getrennte Variablen für einzelne Komponenten zu verwenden, in welchem ​​Fall das Berechnen von Hessian in etwa so aussehen würde.

%Vor%

Sie werden sehen

%Vor%     
Yaroslav Bulatov 05.07.2016 13:49
quelle

Tags und Links