ONE - On-device Neural Engine
Loading...
Searching...
No Matches
registry.py
Go to the documentation of this file.
1from typing import Type, Dict
2from .optimizer import Optimizer
3from .adam import Adam
4from .sgd import SGD
5from onert.native.libnnfw_api_pybind import optimizer as optimizer_type
6
7
9 """
10 Registry for creating optimizers by name.
11 """
12 _optimizers: Dict[str, Type[Optimizer]] = {"adam": Adam, "sgd": SGD}
13
14 @staticmethod
15 def create_optimizer(name: str) -> Optimizer:
16 """
17 Create an optimizer instance by name.
18
19 Args:
20 name (str): Name of the optimizer.
21
22 Returns:
23 Optimizer: Optimizer instance.
24 """
25 if name not in OptimizerRegistry._optimizers:
26 raise ValueError(
27 f"Unknown Optimizer: {name}. Custom optimizer is not supported yet")
28 return OptimizerRegistry._optimizers[name]()
29
30 @staticmethod
31 def map_optimizer_to_enum(optimizer_instance: Optimizer) -> optimizer_type:
32 """
33 Maps an optimizer instance to the appropriate enum value.
34
35 Args:
36 optimizer_instance (Optimizer): An instance of an optimizer.
37
38 Returns:
39 optimizer_type: Corresponding enum value for the optimizer.
40
41 Raises:
42 TypeError: If the optimizer_instance is not a recognized optimizer type.
43 """
44 optimizer_to_enum: Dict[Type[Optimizer], optimizer_type] = {
45 SGD: optimizer_type.SGD,
46 Adam: optimizer_type.ADAM
47 }
48 for cls, enum_val in optimizer_to_enum.items():
49 if isinstance(optimizer_instance, cls):
50 return enum_val
51 raise TypeError(
52 f"Unsupported optimizer type: {type(optimizer_instance).__name__}. "
53 f"Supported types are: {list(optimizer_to_enum.keys())}.")
optimizer_type map_optimizer_to_enum(Optimizer optimizer_instance)
Definition registry.py:31