Tôi đã viết một MLP đơn giản trong TensorFlow đang tạo mô hình Cổng XOR .
Vì vậy đối với:
input_data = [[0., 0.], [0., 1.], [1., 0.], [1., 1.]]
nó sẽ tạo ra như sau:
output_data = [[0.], [1.], [1.], [0.]]
Mạng có một lớp đầu vào, một lớp ẩn và một lớp đầu ra với 2, 5 và 1 nơ-ron mỗi lớp.
Hiện tại tôi có entropy chéo sau:
cross_entropy = -(n_output * tf.log(output) + (1 - n_output) * tf.log(1 - output))
Tôi cũng đã thử cách thay thế đơn giản hơn này:
cross_entropy = tf.square(n_output - output)
cùng với một số cố gắng khác.
Tuy nhiên, không có vấn đề gì thiết lập của tôi là, lỗi với một GradientDescentOptimizerđã giảm nhiều chậm hơn so với một AdamOptimizer.
Trong thực tế đã tf.train.AdamOptimizer(0.01)tạo ra kết quả thực sự tốt sau 400-800 bước học (phụ thuộc vào tốc độ học tập, nơi 0.01có kết quả tốt nhất) trong khi tf.train.GradientDescentOptimizerluôn cần hơn 2000 bước học bất kể sử dụng phép tính entropy chéo hay tỷ lệ học tập nào.
Tại sao cái này rất? Có vẻ như AdamOptimizerluôn luôn là một lựa chọn tốt hơn?!