Source code for pina._src.optim.torch_optimizer

"""Module for wrapping PyTorch optimizers."""

import torch
from pina._src.core.utils import check_consistency
from pina._src.optim.optimizer_interface import OptimizerInterface


[docs] class TorchOptimizer(OptimizerInterface): """ The wrapper class for PyTorch optimizers. This class wraps a ``torch.optim.Optimizer`` class and defers its instantiation until runtime. It enables a consistent interface across different optimizer backends while leveraging PyTorch's optimization algorithms. :Example: >>> from pina.optim import TorchOptimizer >>> import torch >>> optimizer = TorchOptimizer(torch.optim.Adam, lr=0.001) >>> optimizer.optimizer_class <class 'torch.optim.adam.Adam'> """ def __init__(self, optimizer_class, **kwargs): """ Initialization of the :class:`TorchOptimizer` class. :param torch.optim.Optimizer optimizer_class: The subclass of ``torch.optim.Optimizer`` to be instantiated. :param dict kwargs: Additional keyword arguments forwarded to the optimizer constructor. See more `here <https://pytorch.org/docs/stable/optim.html#algorithms>`_. :raises ValueError: If ``optimizer_class`` is not a subclass of ``torch.optim.Optimizer``. """ # Check consistency check_consistency(optimizer_class, torch.optim.Optimizer, subclass=True) # Initialize attributes self.optimizer_class = optimizer_class self.kwargs = kwargs self._optimizer_instance = None
[docs] def hook(self, parameters): """ Execute custom logic associated with the optimizer instance. This method is intended to encapsulate any additional behavior that should be triggered during the optimization process. :param dict parameters: The parameters of the model to be optimized. """ self._optimizer_instance = self.optimizer_class( parameters, **self.kwargs )
@property def instance(self): """ The underlying optimizer object. :return: The optimizer instance. :rtype: torch.optim.Optimizer """ return self._optimizer_instance