Ich habe ein einfaches MLP in TensorFlow geschrieben, das ein XOR-Gate modelliert .
So für:
input_data = [[0., 0.], [0., 1.], [1., 0.], [1., 1.]]
es sollte folgendes erzeugen:
output_data = [[0.], [1.], [1.], [0.]]
Das Netzwerk hat eine Eingangsschicht, eine versteckte Schicht und eine Ausgangsschicht mit jeweils 2, 5 und 1 Neuronen.
Derzeit habe ich folgende Kreuzentropie:
cross_entropy = -(n_output * tf.log(output) + (1 - n_output) * tf.log(1 - output))
Ich habe auch diese einfachere Alternative ausprobiert:
cross_entropy = tf.square(n_output - output)
zusammen mit einigen anderen Versuchen.
Unabhängig von meinem Setup GradientDescentOptimizer
verringerte sich der Fehler mit a jedoch viel langsamer als mit a AdamOptimizer
.
Tatsächlich tf.train.AdamOptimizer(0.01)
wurden nach 400-800 Lernschritten (in Abhängigkeit von der Lernrate, wo 0.01
die besten Ergebnisse erzielt wurden) wirklich gute Ergebnisse erzielt, während tf.train.GradientDescentOptimizer
immer mehr als 2000 Lernschritte benötigt wurden, unabhängig davon, welche Kreuzentropieberechnung oder Lernrate verwendet wurde.
Warum ist das so? Es scheint, dass das AdamOptimizer
immer eine bessere Wahl ist ?!