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_denseresource_apply_sparsecreate_slots_resource_apply_sparse_create_slots
公式にtf.keras.optimizers.Optimizerサブクラス(使用tf.keras.optimizers.Adam例として)がある_resource_apply_dense、_resource_apply_sparseおよび_create_slots方法は、先頭の下線なしのそのような方法は存在しません。
やや少ない公式で同様のリーディングアンダースコアの方法があるtf.keras.optimizers.Optimizer(例えば、サブクラスtfa.optimizers.MovingAverage:TensorFlowアドオンからは_resource_apply_dense、_resource_apply_sparse、_create_slots)。
私にとってもう1つの混乱点は、TensorFlowアドオンオプティマイザーの一部もapply_gradientsメソッド(たとえば、tfa.optimizers.MovingAverage)をオーバーライドするのに対し、tf.keras.optimizersオプティマイザーはオーバーライドしないことです。
また、メソッド呼び出しapply_gradientsのtf.keras.optimizers.Optimizerメソッドがを呼び出し_create_slotsていることに気づきましたが、基本tf.keras.optimizers.Optimizerクラスには_create_slotsメソッドがありません。したがって、サブクラスがをオーバーライドしない場合、オプティマイザーサブクラスで_create_slotsメソッドを定義する必要があるようapply_gradientsです。
ご質問
aをサブクラス化する正しい方法は何tf.keras.optimizers.Optimizerですか?具体的には
tf.keras.optimizers.Optimizer上部にリストされているドキュメントは、それらが言及するメソッドの先頭のアンダースコアバージョンをオーバーライドすることを単に意味しますか(たとえば、_resource_apply_denseではなくresource_apply_dense)?もしそうなら、これらのプライベートに見えるメソッドがTensorFlowの将来のバージョンでそれらの振る舞いを変更しないことについてのAPI保証はありますか?これらのメソッドのシグネチャは何ですか?- メソッド
apply_gradientsに加えていつオーバーライド_apply_resource_[dense|sparse]するのですか?
_resource_apply_denseまたはの宣言を_resource_apply_sparse確認し、実装されたオプティマイザでの使用法を確認できます。安定性が保証されたパブリックAPIではないかもしれませんが、それらを使用することはかなり安全だと思います。彼らはこの面でより良いガイダンスを提供するべきです。
get_config)追加される予定である場合もありますが、それらはまだパブリックドキュメントに表示されません。