Import Geant4 11.4.0.beta source tree
This commit is contained in:
@@ -0,0 +1,55 @@
|
||||
from enum import IntEnum
|
||||
|
||||
from tensorflow.keras.optimizers import Optimizer, Adadelta, Adagrad, Adam, Adamax, Ftrl, SGD, Nadam, RMSprop
|
||||
|
||||
|
||||
class OptimizerType(IntEnum):
|
||||
""" Enum class of various optimizer types.
|
||||
|
||||
This class must be IntEnum to be JSON serializable. This feature is important because, when Optuna's study is
|
||||
saved in a relational DB, all objects must be JSON serializable.
|
||||
"""
|
||||
|
||||
SGD = 0
|
||||
RMSPROP = 1
|
||||
ADAM = 2
|
||||
ADADELTA = 3
|
||||
ADAGRAD = 4
|
||||
ADAMAX = 5
|
||||
NADAM = 6
|
||||
FTRL = 7
|
||||
|
||||
|
||||
class OptimizerFactory:
|
||||
"""Factory of optimizer like Stochastic Gradient Descent, RMSProp, Adam, etc.
|
||||
"""
|
||||
|
||||
@staticmethod
|
||||
def create_optimizer(optimizer_type: OptimizerType, learning_rate: float) -> Optimizer:
|
||||
"""For a given type and a learning rate creates an instance of optimizer.
|
||||
|
||||
Args:
|
||||
optimizer_type: a type of optimizer
|
||||
learning_rate: a learning rate that should be passed to an optimizer
|
||||
|
||||
Returns:
|
||||
An instance of optimizer.
|
||||
|
||||
"""
|
||||
if optimizer_type == OptimizerType.SGD:
|
||||
return SGD(learning_rate)
|
||||
elif optimizer_type == OptimizerType.RMSPROP:
|
||||
return RMSprop(learning_rate)
|
||||
elif optimizer_type == OptimizerType.ADAM:
|
||||
return Adam(learning_rate)
|
||||
elif optimizer_type == OptimizerType.ADADELTA:
|
||||
return Adadelta(learning_rate)
|
||||
elif optimizer_type == OptimizerType.ADAGRAD:
|
||||
return Adagrad(learning_rate)
|
||||
elif optimizer_type == OptimizerType.ADAMAX:
|
||||
return Adamax(learning_rate)
|
||||
elif optimizer_type == OptimizerType.NADAM:
|
||||
return Nadam(learning_rate)
|
||||
else:
|
||||
# i.e. optimizer_type == OptimizerType.FTRL
|
||||
return Ftrl(learning_rate)
|
||||
Reference in New Issue
Block a user