สมมติว่าฉันต้องการเขียนคลาสของเครื่องมือเพิ่มประสิทธิภาพแบบกำหนดเองที่สอดคล้องกับtf.kerasAPI (โดยใช้รุ่น TensorFlow> = 2.0) ฉันสับสนเกี่ยวกับวิธีการทำเอกสารกับสิ่งที่ทำในการนำไปใช้งาน
เอกสารประกอบสำหรับtf.keras.optimizers.Optimizer รัฐ ,
### Write a customized optimizer.
If you intend to create your own optimization algorithm, simply inherit from
this class and override the following methods:
- resource_apply_dense (update variable given gradient tensor is dense)
- resource_apply_sparse (update variable given gradient tensor is sparse)
- create_slots (if your optimizer algorithm requires additional variables)
แต่ในปัจจุบันtf.keras.optimizers.Optimizerการดำเนินงานไม่ได้กำหนดresource_apply_denseวิธีการ แต่ไม่กำหนดเอกชนมองหาวิธีการต้นขั้ว_resource_apply_dense ในทำนองเดียวกันไม่มีresource_apply_sparseหรือcreate_slotsวิธีการ แต่มี_resource_apply_sparseต้นขั้ววิธีการและวิธีการเรียก_create_slots
อย่างเป็นทางการในtf.keras.optimizers.Optimizersubclasses (โดยใช้tf.keras.optimizers.Adamเป็นตัวอย่าง) มี_resource_apply_dense, _resource_apply_sparseและ_create_slotsวิธีการและไม่มีวิธีการดังกล่าวได้โดยไม่ต้องขีดชั้นนำ
มีวิธีการชั้นนำขีดที่คล้ายกันในเล็กน้อยน้อยอย่างเป็นทางการtf.keras.optimizers.Optimizersubclasses (เช่นtfa.optimizers.MovingAverageจาก TensorFlow Addons: _resource_apply_dense, _resource_apply_sparse, _create_slots)
อีกจุดที่น่าประหลาดใจสำหรับฉันคือบางส่วนของเครื่องมือเพิ่มประสิทธิภาพ TensorFlow Addons ยังแทนที่apply_gradientsวิธี (เช่นtfa.optimizers.MovingAverage) ในขณะที่tf.keras.optimizersเครื่องมือเพิ่มประสิทธิภาพไม่ได้
ยิ่งกว่านั้นฉันสังเกตเห็นว่าapply_gradientsวิธีการของtf.keras.optimizers.Optimizerการเรียก_create_slotsเมธอดแต่tf.keras.optimizers.Optimizerคลาสพื้นฐานไม่มี_create_slotsเมธอด ดังนั้นจึงดูเหมือนว่า_create_slotsวิธีการจะต้องมีการกำหนดไว้ใน subclass apply_gradientsเพิ่มประสิทธิภาพถ้าคลาสย่อยที่ไม่ได้แทนที่
คำถาม
วิธีที่ถูกต้องในการ subclass tf.keras.optimizers.Optimizerคืออะไร? โดยเฉพาะอย่างยิ่ง
- ที่ไม่
tf.keras.optimizers.Optimizerเอกสารที่ระบุไว้ที่ด้านบนเพียงหมายถึงการแทนที่รุ่นชั้นนำขีดของวิธีการที่พวกเขาพูดถึง (เช่น_resource_apply_denseแทนresource_apply_dense)? ถ้าใช่มีการรับประกัน API เกี่ยวกับวิธีการดูส่วนตัวเหล่านี้ซึ่งไม่เปลี่ยนพฤติกรรมของพวกเขาในรุ่นอนาคตของ TensorFlow หรือไม่? ลายเซ็นของวิธีการเหล่านี้คืออะไร? - เมื่อใดที่จะแทนที่
apply_gradientsนอกเหนือจาก_apply_resource_[dense|sparse]วิธีการ?
แก้ไข ปัญหาที่เปิดใน GitHub: # 36449
_resource_apply_denseหรือ_resource_apply_sparseและดูการใช้ในเครื่องมือเพิ่มประสิทธิภาพที่นำมาใช้ ในขณะที่มันอาจไม่เป็นเช่นนั้นฉันคิดว่า API สาธารณะที่รับประกันความเสถียร แต่ฉันคิดว่ามันค่อนข้างปลอดภัยที่จะใช้พวกเขา พวกเขาควรให้แนวทางที่ดีกว่าในด้านนี้
get_config) แต่แล้วพวกเขาก็ยังไม่ควรปรากฏในเอกสารสาธารณะ