2017-11-30 3 views
0

Um eine kontraktive Autoencoder zu konstruieren, verwendet man einen gewöhnlichen Autoencoder mit der Kostenfunktion enter image description hereTensorflow Gradienten kontraktive Autoencoder Kosten verursacht nicht konvergiert

dies mit dem MNIST-Datensatz zu implementieren, definiert ich die Kostenfunktion tensorflow mit Verwendung als

def cost(X, X_prime): 
    grad = tf.gradients(ys=X_prime, xs=X) 
    cost = tf.reduce_mean(tf.square(X_prime - X)) + tf.reduce_mean(tf.square(grad)) 
    return cost 

und AdamOptimizer für Backpropagation verwendet. Die Kosten gehen jedoch nicht niedriger als 0,067, was besonders ist. Ist meine Implementierung der Kostenfunktion falsch?

Edit: Nach dem documentation auf tf.gradients lesen, die obige Implementierung würde enter image description here statt berechnet haben. Also meine Frage ist, wie machen Sie Derivate Komponente weise in Tensorflow?

Antwort

1

Um Ihre Post-Edit Frage zu beantworten: TensorFlow hat keine Funktion, die Jacobians berechnet. Das folgende Zitat, entnommen aus einem Github discussion, Skizzen, wie Sie vielleicht die Jacobi berechnen sich:

Derzeit können Sie die Jacobi von berechnen, sagen wir, einen Vektor, durch Gradienten mehrmals aufrufen, eine für jeden skalaren Komponente (erhalten durch Schneiden) des ursprünglichen Vektors und erneutes Zusammensetzen der Ergebnisse.

Verwandte Themen