ONE - On-device Neural Engine
All Data Structures Namespaces Files Functions Variables Typedefs Enumerations Enumerator Friends Macros Modules Pages
registry.py
Go to the documentation of this file.
1from onert.native.libnnfw_api_pybind import optimizer as optimizer_type
2from .adam import Adam
3from .sgd import SGD
4
5
7 """
8 Registry for creating optimizers by name.
9 """
10 _optimizers = {"adam": Adam, "sgd": SGD}
11
12 @staticmethod
14 """
15 Create an optimizer instance by name.
16 Args:
17 name (str): Name of the optimizer.
18 Returns:
19 BaseOptimizer: Optimizer instance.
20 """
21 if name not in OptimizerRegistry._optimizers:
22 raise ValueError(
23 f"Unknown Optimizer: {name}. Custom optimizer is not supported yet")
24 return OptimizerRegistry._optimizers[name]()
25
26 @staticmethod
27 def map_optimizer_to_enum(optimizer_instance):
28 """
29 Maps an optimizer instance to the appropriate enum value.
30 Args:
31 optimizer_instance (Optimizer): An instance of an optimizer.
32 Returns:
33 optimizer_type: Corresponding enum value for the optimizer.
34 Raises:
35 TypeError: If the optimizer_instance is not a recognized optimizer type.
36 """
37 # Optimizer to Enum mapping
38 optimizer_to_enum = {SGD: optimizer_type.SGD, Adam: optimizer_type.ADAM}
39 for optimizer_class, enum_value in optimizer_to_enum.items():
40 if isinstance(optimizer_instance, optimizer_class):
41 return enum_value
42 raise TypeError(
43 f"Unsupported optimizer type: {type(optimizer_instance).__name__}. "
44 f"Supported types are: {list(optimizer_to_enum.keys())}.")