Misalkan saya ingin menulis kelas pengoptimal khusus yang sesuai dengan tf.kerasAPI (menggunakan versi TensorFlow> = 2.0). Saya bingung tentang cara yang terdokumentasi untuk melakukan ini versus apa yang dilakukan dalam implementasi.
Dokumentasi untuk tf.keras.optimizers.Optimizer negara ,
### 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)
Namun, tf.keras.optimizers.Optimizerimplementasi saat ini tidak mendefinisikan resource_apply_densemetode, tetapi tidak menentukan _resource_apply_densemetode rintisan yang tampak pribadi . Demikian pula, tidak ada resource_apply_sparseatau create_slotsmetode, tetapi ada _resource_apply_sparsemetode rintisan dan _create_slotspemanggilan metode .
Dalam resmi tf.keras.optimizers.Optimizersubclass (menggunakan tf.keras.optimizers.Adamsebagai contoh), ada _resource_apply_dense, _resource_apply_sparsedan _create_slotsmetode, dan tidak ada metode tersebut tanpa awalan garis bawah.
Ada metode yang serupa terkemuka-bawah di sedikit-kurang-resmi tf.keras.optimizers.Optimizersubclass (misalnya, tfa.optimizers.MovingAveragedari TensorFlow Addons: _resource_apply_dense, _resource_apply_sparse, _create_slots).
Poin perancu lain bagi saya adalah bahwa beberapa pengoptimal TensorFlow Addons juga menimpa apply_gradientsmetode (misalnya, tfa.optimizers.MovingAverage), sedangkan tf.keras.optimizerspengoptimal tidak.
Selain itu, saya melihat bahwa apply_gradientsmetode tf.keras.optimizers.Optimizermetode panggilan_create_slots , tapi dasar tf.keras.optimizers.Optimizerkelas tidak memiliki _create_slotsmetode. Jadi, tampaknya _create_slotsmetode harus didefinisikan dalam subkelas pengoptimal jika subkelas itu tidak menimpanya apply_gradients.
Pertanyaan
Apa cara yang benar untuk subkelas a tf.keras.optimizers.Optimizer? Secara khusus,
- Apakah
tf.keras.optimizers.Optimizerdokumentasi yang tercantum di atas hanya bermaksud untuk menimpa versi terdepan-garis bawah dari metode yang mereka sebutkan (misalnya,_resource_apply_densebukanresource_apply_dense)? Jika demikian, apakah ada jaminan API tentang metode yang tampak pribadi ini tidak mengubah perilaku mereka di versi TensorFlow yang akan datang? Apa saja tanda tangan dari metode ini? - Kapan satu menimpa
apply_gradientsselain_apply_resource_[dense|sparse]metode?
Edit. Masalah yang terbuka pada GitHub: # 36449
_resource_apply_denseatau _resource_apply_sparse, dan melihat penggunaannya dalam pengoptimal yang diterapkan. Meskipun mungkin tidak, saya pikir, API publik dengan jaminan stabilitas, saya akan mengatakan itu cukup aman untuk menggunakannya. Mereka hanya harus memberikan panduan yang lebih baik dalam aspek ini.
get_config), tetapi kemudian mereka belum muncul di dokumentasi publik .