Spaces:
Build error
Build error
| """ | |
| Optimizer factory. Creates optimizers from config strings. | |
| """ | |
| import torch.optim as optim | |
| import torch.nn as nn | |
| def create_optimizer( | |
| model_or_params, | |
| optimizer_name: str = 'adam', | |
| learning_rate: float = 0.001, | |
| weight_decay: float = 0.0001, | |
| momentum: float = 0.9, | |
| ) -> optim.Optimizer: | |
| """ | |
| Factory function to create optimizer. | |
| Args: | |
| model_or_params: nn.Module or list of parameters/param groups | |
| optimizer_name: 'adam', 'adamw', 'sgd', or 'rmsprop' | |
| learning_rate: base learning rate | |
| weight_decay: L2 regularization | |
| momentum: momentum for SGD/RMSProp | |
| """ | |
| # Get parameters | |
| if isinstance(model_or_params, nn.Module): | |
| params = model_or_params.parameters() | |
| elif isinstance(model_or_params, list) and len(model_or_params) > 0: | |
| if isinstance(model_or_params[0], dict): | |
| # Already param groups | |
| params = model_or_params | |
| else: | |
| params = model_or_params | |
| else: | |
| params = model_or_params | |
| name = optimizer_name.lower() | |
| if name == 'adam': | |
| return optim.Adam(params, lr=learning_rate, weight_decay=weight_decay) | |
| elif name == 'adamw': | |
| return optim.AdamW(params, lr=learning_rate, weight_decay=weight_decay) | |
| elif name == 'sgd': | |
| return optim.SGD(params, lr=learning_rate, weight_decay=weight_decay, | |
| momentum=momentum, nesterov=True) | |
| elif name == 'rmsprop': | |
| return optim.RMSprop(params, lr=learning_rate, weight_decay=weight_decay, | |
| momentum=momentum) | |
| else: | |
| raise ValueError(f"Unknown optimizer: {name}. Use 'adam', 'adamw', 'sgd', or 'rmsprop'.") | |