Saya telah menulis MLP sederhana di TensorFlow yang memodelkan XOR-Gate .
Jadi untuk:
input_data = [[0., 0.], [0., 1.], [1., 0.], [1., 1.]]
itu harus menghasilkan yang berikut:
output_data = [[0.], [1.], [1.], [0.]]
Jaringan memiliki lapisan input, lapisan tersembunyi dan lapisan keluaran dengan masing-masing 2, 5 dan 1 neuron.
Saat ini saya memiliki cross entropy berikut:
cross_entropy = -(n_output * tf.log(output) + (1 - n_output) * tf.log(1 - output))
Saya juga sudah mencoba alternatif yang lebih sederhana ini:
cross_entropy = tf.square(n_output - output)
bersama dengan beberapa percobaan lainnya.
Namun, tidak peduli apa pengaturan saya, kesalahan dengan GradientDescentOptimizer
menurun jauh lebih lambat daripada AdamOptimizer
.
Bahkan tf.train.AdamOptimizer(0.01)
menghasilkan hasil yang benar-benar baik setelah 400-800 langkah pembelajaran (dalam ketergantungan tingkat pembelajaran, di mana 0.01
memiliki hasil terbaik) sementara tf.train.GradientDescentOptimizer
selalu diperlukan lebih dari 2000 langkah pembelajaran tidak peduli apa perhitungan lintas entropi atau tingkat pembelajaran yang digunakan.
Kenapa begitu? Tampaknya AdamOptimizer
selalu ada pilihan yang lebih baik ?!