Source code for deoxys.model.optimizers

# -*- coding: utf-8 -*-

__author__ = "Ngoc Huynh Bao"
__email__ = "ngoc.huynh.bao@nmbu.no"


from ..keras.optimizers import Optimizer, deserialize
from ..utils import Singleton


[docs]class Optimizers(metaclass=Singleton): """ A singleton that contains all the registered customized optimizers """ def __init__(self): self._optimizers = {}
[docs] def register(self, key, optimizer): if not issubclass(optimizer, Optimizer): raise ValueError( "The customized optimizer has to be a subclass" + " of keras.optimizers.Optimizer" ) if key in self._optimizers: raise KeyError( "Duplicated key, please use another key for this optimizer" ) else: self._optimizers[key] = optimizer
[docs] def unregister(self, key): if key in self._optimizers: del self._optimizers[key]
@property def optimizers(self): return self._optimizers
[docs]def register_optimizer(key, optimizer): """ Register the customized optimizer. If the key name is already registered, it will raise a KeyError exception Parameters ---------- key : str The unique key-name of the optimizer optimizer : tensorflow.keras.optimizers.Optimizer The customized optimizer class """ Optimizers().register(key, optimizer)
[docs]def unregister_optimizer(key): """ Remove the registered optimizer with the key-name Parameters ---------- key : str The key-name of the optimizer to be removed """ Optimizers().unregister(key)
[docs]def optimizer_from_config(config): if 'class_name' not in config: raise ValueError('class_name is needed to define optimizer') if 'config' not in config: # auto add empty config for optimizer with only class_name config['config'] = {} return deserialize(config, custom_objects=Optimizers().optimizers)