MultiOptimizer classkeras.optimizers.MultiOptimizer(optimizer_map, loss_scale_factor=None, name=None)
An optimizer wrapper that delegates variables to different optimizers.
Initialize the object with an OptimizerMap instance or a callable function that returns an optimizer for a given variable.
Example
model.compile( optimizer=MultiOptimizer( OptimizerMap(default_optimizer=optimizers.SGD(), {"encoder/.*": optimizers.Adam()}) ), loss="binary_crossentropy", )
def optimizer_selector(variable): if "encoder" in variable.path: return optimizers.Adam() else: return optimizers.SGD()
model.compile( optimizer=MultiOptimizer(optimizer_selector), loss="binary_crossentropy", )
To access the attributes of the sub-optimizers, iterate over the
optimizers using .optimizers:
For example:
optimizer = MultiOptimizer(OptimizerMap( default_optimizer=optimizers.Adam() )) optimizer['.encoder'] = optimizers.SGD()
for optim in optimizer.optimizers: print(optim.learning_rate) print(optim.iterations) print(optim.loss_scale_factor) ...
The MultiOptimizer class instances will not expose learning_rate
attribute and will raise an error if accessed. This is because the
learning rate might be different for different sub-optimizers.
Note: Optimizer-specific callbacks are not supported yet.