2016-07-11 4 views
1

Ich erhalte einen automatischen Differenzierungsfehler für Max-Pooling. Beachten Sie, dass ich ein Bild einspeise, den Gradient der Convnet-Ausgabe für das Eingabebild verwende, das Bild basierend auf dem Farbverlauf aktualisiere und das Bild dann zurück ans Netzwerk füttere (denke an gegenteilige Bilder). Dies führt zu einer schwierigeren Gradientenbehandlung, und daher erhalte ich diesen Fehler:Max-Pool-Gradientenfehler (Tensorflow 0.9rc0)

LookupError: No gradient defined for operation 'gradients/MaxPool_grad/MaxPoolGrad' (op type: MaxPoolGrad) 

Gibt es eine einfache Problemumgehung?

Antwort

3

Wie die Fehlermeldung suggeriert, hat die MaxPoolGrad Operation in TensorFlow nicht die entsprechende Gradientenfunktion in TensorFlow ab Version 0.9 implementiert.

Um es auszuarbeiten, führt die Python-Funktion tf.gradients Reverse-Modus Auto-Differenzierung durch das Gehen der Grafik der Berechnung, die bisher aufgebaut wurde. Wenn es auf einen Knoten mit dem Operationstyp Foo stößt, versucht es, die entsprechende Gradientenfunktion in einer internen Registrierung nachzuschlagen. Die Registrierung wird durch Aufrufen der RegisterGradient-Funktion aufgefüllt.

Beachten Sie, dass während TensorFlow Einträge in dieser Registrierung für viele (tatsächlich die meisten) Arten von Knoten enthält, es immer noch eine Teilmenge von Knotentypen gibt, für die keine Einträge vorhanden sind. Solche Fälle verursachen den Fehler, den Sie oben sehen. Es wird in der Tat nützlich sein, eine Gradientenfunktion für MaxPoolGrad herauszufinden, sie zu implementieren und eine Pull-Anforderung zu senden.