Misalkan saya ingin menulis kelas pengoptimal khusus yang sesuai dengan tf.keras
API (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.Optimizer
implementasi saat ini tidak mendefinisikan resource_apply_dense
metode, tetapi tidak menentukan _resource_apply_dense
metode rintisan yang tampak pribadi . Demikian pula, tidak ada resource_apply_sparse
atau create_slots
metode, tetapi ada _resource_apply_sparse
metode rintisan dan _create_slots
pemanggilan metode .
Dalam resmi tf.keras.optimizers.Optimizer
subclass (menggunakan tf.keras.optimizers.Adam
sebagai contoh), ada _resource_apply_dense
, _resource_apply_sparse
dan _create_slots
metode, dan tidak ada metode tersebut tanpa awalan garis bawah.
Ada metode yang serupa terkemuka-bawah di sedikit-kurang-resmi tf.keras.optimizers.Optimizer
subclass (misalnya, tfa.optimizers.MovingAverage
dari TensorFlow Addons: _resource_apply_dense
, _resource_apply_sparse
, _create_slots
).
Poin perancu lain bagi saya adalah bahwa beberapa pengoptimal TensorFlow Addons juga menimpa apply_gradients
metode (misalnya, tfa.optimizers.MovingAverage
), sedangkan tf.keras.optimizers
pengoptimal tidak.
Selain itu, saya melihat bahwa apply_gradients
metode tf.keras.optimizers.Optimizer
metode panggilan_create_slots
, tapi dasar tf.keras.optimizers.Optimizer
kelas tidak memiliki _create_slots
metode. Jadi, tampaknya _create_slots
metode 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.Optimizer
dokumentasi yang tercantum di atas hanya bermaksud untuk menimpa versi terdepan-garis bawah dari metode yang mereka sebutkan (misalnya,_resource_apply_dense
bukanresource_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_gradients
selain_apply_resource_[dense|sparse]
metode?
Edit. Masalah yang terbuka pada GitHub: # 36449
_resource_apply_dense
atau _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 .