Supposons que je veuille écrire une classe d'optimiseur personnalisée conforme à l' tf.kerasAPI (en utilisant la version TensorFlow> = 2.0). Je suis confus quant à la façon documentée de le faire par rapport à ce qui est fait dans les implémentations.
La documentation pour les tf.keras.optimizers.Optimizer états ,
### 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)
Cependant, le courant tf.keras.optimizers.Optimizermise en œuvre ne définit pas une resource_apply_denseméthode, mais elle ne définit un privé à la recherche _resource_apply_densestub de la méthode . De même, il n'y a pas resource_apply_sparseou create_slotsméthodes, mais il y a un _resource_apply_sparsebout de méthode et un _create_slotsappel de méthode .
Dans officielles tf.keras.optimizers.Optimizersous - classes ( en utilisant tf.keras.optimizers.Adamcomme exemple), il existe _resource_apply_dense, _resource_apply_sparseet les _create_slotsméthodes, et il n'y a pas de telles méthodes sans le trait de soulignement de premier plan.
Il existe des méthodes d' avant-underscore similaires légèrement moins officielles tf.keras.optimizers.Optimizersous - classes (par exemple, tfa.optimizers.MovingAveragede tensorflow addons: _resource_apply_dense, _resource_apply_sparse, _create_slots).
Un autre point de confusion pour moi est que certains des optimiseurs TensorFlow Addons remplacent également la apply_gradientsméthode (par exemple, tfa.optimizers.MovingAverage), contrairement aux tf.keras.optimizersoptimiseurs.
De plus, j'ai remarqué que la apply_gradientsméthode des appels de tf.keras.optimizers.Optimizerméthode , mais la classe de base n'a pas de méthode. Il semble donc qu'une méthode doit être définie dans une sous-classe d'optimiseur si cette sous-classe ne remplace pas ._create_slotstf.keras.optimizers.Optimizer_create_slots_create_slotsapply_gradients
Des questions
Quelle est la bonne façon de sous-classer a tf.keras.optimizers.Optimizer? Plus précisément,
- La
tf.keras.optimizers.Optimizerdocumentation répertoriée en haut signifie-t-elle simplement remplacer les versions de soulignement principal des méthodes qu'elles mentionnent (par exemple,_resource_apply_denseau lieu deresource_apply_dense)? Dans l'affirmative, existe-t-il des garanties API quant à ces méthodes d'apparence privée ne modifiant pas leur comportement dans les futures versions de TensorFlow? Quelles sont les signatures de ces méthodes? - Quand remplacerait-on
apply_gradientsen plus des_apply_resource_[dense|sparse]méthodes?
_resource_apply_denseou _resource_apply_sparse, et voir leur utilisation dans les optimiseurs implémentés. Bien que ce ne soit pas, je pense, une API publique avec des garanties de stabilité, je dirais que c'est assez sûr de les utiliser. Ils devraient juste fournir une meilleure orientation à cet égard.
get_config), mais ils ne devraient pas encore apparaître dans la documentation publique .