ผมเคยเขียนง่ายMLPในTensorFlowซึ่งจะสร้างแบบจำลองXOR ประตู
ดังนั้นสำหรับ:
input_data = [[0., 0.], [0., 1.], [1., 0.], [1., 1.]]
มันควรผลิตดังต่อไปนี้:
output_data = [[0.], [1.], [1.], [0.]]
เครือข่ายมีเลเยอร์อินพุตเลเยอร์ที่ซ่อนอยู่และเลเยอร์เอาท์พุทที่มีเซลล์ประสาท 2, 5 และ 1 เซลล์
ขณะนี้ฉันมีเอนโทรปีของการข้ามต่อไปนี้:
cross_entropy = -(n_output * tf.log(output) + (1 - n_output) * tf.log(1 - output))
ฉันได้ลองทางเลือกที่ง่ายกว่านี้แล้ว:
cross_entropy = tf.square(n_output - output)
ควบคู่ไปกับความพยายามอื่น ๆ
อย่างไรก็ตามไม่ว่าสิ่งที่การตั้งค่าของฉันคือข้อผิดพลาดที่มีการGradientDescentOptimizer
ลดลงมากAdamOptimizer
ช้ากว่า
ในความเป็นtf.train.AdamOptimizer(0.01)
จริงให้ผลลัพธ์ที่ดีจริงๆหลังจากขั้นตอนการเรียนรู้ 400-800 ขั้น (ขึ้นอยู่กับอัตราการเรียนรู้ที่0.01
มีผลลัพธ์ที่ดีที่สุด) ในขณะที่tf.train.GradientDescentOptimizer
ต้องการมากกว่า 2,000 ขั้นตอนการเรียนรู้เสมอไม่ว่าการคำนวณแบบเอนโทรปีหรืออัตราการเรียนรู้
ทำไมเป็นเช่นนี้ ดูเหมือนว่าAdamOptimizer
เป็นทางเลือกที่ดีกว่าเสมอ!