สมมติว่าฉันต้องการเขียนคลาสของเครื่องมือเพิ่มประสิทธิภาพแบบกำหนดเองที่สอดคล้องกับtf.keras
API (โดยใช้รุ่น 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.Optimizer
subclasses (โดยใช้tf.keras.optimizers.Adam
เป็นตัวอย่าง) มี_resource_apply_dense
, _resource_apply_sparse
และ_create_slots
วิธีการและไม่มีวิธีการดังกล่าวได้โดยไม่ต้องขีดชั้นนำ
มีวิธีการชั้นนำขีดที่คล้ายกันในเล็กน้อยน้อยอย่างเป็นทางการtf.keras.optimizers.Optimizer
subclasses (เช่น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
) แต่แล้วพวกเขาก็ยังไม่ควรปรากฏในเอกสารสาธารณะ