Пользовательский оптимизатор TensorFlow Keras - PullRequest
1 голос
/ 08 ноября 2019

Предположим, я хочу написать собственный класс оптимизатора, соответствующий API tf.keras (обратите внимание, что в настоящее время я использую TensorFlow 2.0.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)

Однако текущий *Реализация 1010 * не определяет метод resource_apply_dense, но действительно определяет приватный метод-заглушку _resource_apply_dense. Аналогично, нет методов resource_apply_sparse или create_slots, но есть заглушка метода _resource_apply_sparse и вызов метода _create_slots.

Inофициальные tf.keras.optimizers.Optimizer подклассы (используя tf.keras.optimizers.Adam в качестве примера), существуют методы _resource_apply_dense, _resource_apply_sparse и _create_slots, инет таких методов без начального подчеркивания.

Существуют похожие методы подчеркивания с начальным подчеркиванием в чуть менее официальных подклассах tf.keras.optimizers.Optimizer (например, tfa.optimizers.MovingAverage из TensorFlow Addons).

Еще один неприятный момент для меня заключается в том, что оптимизаторы аддонов TensorFlow также переопределяют метод apply_gradients, тогда как оптимизаторы 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? В частности,

  1. Указывает ли перечисленная вверху документация tf.keras.optimizers.Optimizer просто на переопределение версий методов, которые они упоминают (например, _resource_apply_dense вместо resource_apply_dense)? Если да, то есть ли какие-либо гарантии API относительно того, что эти приватно выглядящие методы не изменят своего поведения в будущих версиях TensorFlow?
  2. Когда можно переопределить apply_gradients в дополнение к _apply_resource_[dense|sparse] методам?
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...