Ho scritto un semplice MLP in TensorFlow che sta modellando un XOR-Gate .
Quindi per:
input_data = [[0., 0.], [0., 1.], [1., 0.], [1., 1.]]
dovrebbe produrre quanto segue:
output_data = [[0.], [1.], [1.], [0.]]
La rete ha uno strato di input, uno nascosto e uno di output con 2, 5 e 1 neuroni ciascuno.
Attualmente ho la seguente entropia incrociata:
cross_entropy = -(n_output * tf.log(output) + (1 - n_output) * tf.log(1 - output))
Ho anche provato questa alternativa più semplice:
cross_entropy = tf.square(n_output - output)
insieme ad altri tentativi.
Tuttavia, indipendentemente dalla mia configurazione, l'errore con a GradientDescentOptimizer
stava diminuendo molto più lentamente di un AdamOptimizer
.
In effetti, tf.train.AdamOptimizer(0.01)
dopo 400-800 passi di apprendimento (in base alla frequenza di apprendimento, dove 0.01
avevano i risultati migliori) sono stati ottenuti risultati davvero buoni, mentre sono tf.train.GradientDescentOptimizer
sempre stati necessari oltre 2000 passi di apprendimento, indipendentemente dal calcolo dell'entropia o dalla velocità di apprendimento.
Perché è così? Sembra che AdamOptimizer
sia sempre una scelta migliore ?!