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
서브 클래스 ( 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
).
저에게 또 다른 혼란스러운 점은 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
메소드 를 정의 해야합니다apply_gradients
.
질문
서브 클래 싱하는 올바른 방법은 무엇입니까 tf.keras.optimizers.Optimizer
? 구체적으로 특별히,
- 않습니다
tf.keras.optimizers.Optimizer
상단에 나열된 문서는 단순히 언급 된 방법의 주요 밑줄 버전을 오버라이드 (override) (예를 들어, 의미_resource_apply_dense
대신에resource_apply_dense
)? 그렇다면 향후 버전의 TensorFlow에서 동작을 변경하지 않는 이러한 개인용 메소드에 대한 API 보증이 있습니까? 이 방법의 서명은 무엇입니까? - 메소드
apply_gradients
외에 언제 재정의_apply_resource_[dense|sparse]
합니까?
_resource_apply_dense
또는 의 선언을 _resource_apply_sparse
보고 구현 된 최적화 프로그램에서 사용법을 확인할 수 있습니다. 안정성이 보장되는 퍼블릭 API는 아니지만, 사용하는 것이 안전하다고 생각합니다. 그들은이 측면에서 더 나은 지침을 제공해야합니다.
get_config
) 추가 될 예정 이지만 공개 문서 에는 아직 나타나지 않아야 합니다 .