Core Transformer#

transformer #

CLASS DESCRIPTION
Transformer

Base class for stateless data transformations.

Classes#

Transformer() #

Bases: Module, ABC

Base class for stateless data transformations.

For transformations that don't require fitting to data. Simpler than Estimator for pure transformation operations.

Unlike Estimator, Transformer does not have fit(), is_fitted, or in_features/out_features tracking. It only provides the transform() interface.

Examples of transformers:

  • Normalization (L2, min-max, standardization)
  • Feature extraction from frozen pre-trained models
  • Data type conversions
  • Reshaping operations
  • Pre-computed transformations (PCA projection matrix)

Examples:

Basic usage with L2 normalization:

>>> import torch
>>> from spectre.core import Transformer
>>> class L2Normalizer(Transformer):
...     def transform(self, X: torch.Tensor) -> torch.Tensor:
...         return X / X.norm(dim=1, keepdim=True)
>>> normalizer = L2Normalizer()
>>> X = torch.randn(100, 10)
>>> X_normalized = normalizer.transform(X)
>>> # Can also use as callable
>>> X_normalized = normalizer(X)
>>> # Verify L2 norms are 1
>>> norms = X_normalized.norm(dim=1)
>>> torch.allclose(norms, torch.ones(100))
True

Projection with pre-computed matrix:

>>> class ProjectionTransformer(Transformer):
...     def __init__(self, projection_matrix: torch.Tensor):
...         super().__init__()
...         self.register_buffer("projection_matrix", projection_matrix)
...
...     def transform(self, X: torch.Tensor) -> torch.Tensor:
...         return X @ self.projection_matrix
>>> P = torch.randn(10, 3)
>>> projector = ProjectionTransformer(P)
>>> X = torch.randn(100, 10)
>>> X_proj = projector.transform(X)
>>> X_proj.shape
torch.Size([100, 3])
METHOD DESCRIPTION
transform

Transform input data.

inverse_transform

Inverse transform input data.

forward

Forward pass (alias for transform).

Source code in spectre/core/transformer.py
def __init__(self) -> None:
    super().__init__()
Functions#
transform(X: torch.Tensor) -> torch.Tensor abstractmethod #

Transform input data.

PARAMETER DESCRIPTION
X

Input data to transform.

TYPE: Tensor

RETURNS DESCRIPTION
Tensor

Transformed data.

Source code in spectre/core/transformer.py
@abstractmethod
def transform(self, X: torch.Tensor) -> torch.Tensor:
    """
    Transform input data.

    Parameters
    ----------
    X : torch.Tensor
        Input data to transform.

    Returns
    -------
    torch.Tensor
        Transformed data.
    """
    raise NotImplementedError()
inverse_transform(X: torch.Tensor) -> torch.Tensor #

Inverse transform input data.

Subclasses should override this method if the transformation is invertible.

PARAMETER DESCRIPTION
X

Input data to inverse transform.

TYPE: Tensor

RETURNS DESCRIPTION
Tensor

Inverse transformed data.

RAISES DESCRIPTION
NotImplementedError

If the transformation is not invertible or inverse not implemented.

Source code in spectre/core/transformer.py
def inverse_transform(self, X: torch.Tensor) -> torch.Tensor:
    """
    Inverse transform input data.

    Subclasses should override this method if the transformation is invertible.

    Parameters
    ----------
    X : torch.Tensor
        Input data to inverse transform.

    Returns
    -------
    torch.Tensor
        Inverse transformed data.

    Raises
    ------
    NotImplementedError
        If the transformation is not invertible or inverse not implemented.
    """
    raise NotImplementedError(
        f"{self.__class__.__name__} does not support inverse transformation."
    )
forward(X: torch.Tensor) -> torch.Tensor #

Forward pass (alias for transform).

Makes Transformer compatible with torch.nn.Module pipelines.

PARAMETER DESCRIPTION
X

Input data.

TYPE: Tensor

RETURNS DESCRIPTION
Tensor

Transformed data.

Source code in spectre/core/transformer.py
def forward(self, X: torch.Tensor) -> torch.Tensor:
    """
    Forward pass (alias for transform).

    Makes `Transformer` compatible with `torch.nn.Module` pipelines.

    Parameters
    ----------
    X : torch.Tensor
        Input data.

    Returns
    -------
    torch.Tensor
        Transformed data.
    """
    return self.transform(X)