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.01
có kết quả tốt nhất) trong khi tf.train.GradientDescentOptimizer
luô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ư AdamOptimizer
luôn luôn là một lựa chọn tốt hơn?!