Skip to content

Parameter and ConstrainedParameter

svetlanna.Parameter

Parameter(data: Any, requires_grad: bool = True)

Bases: Tensor

torch.Parameter-like tensor with an internal storage module.

This class is used to keep a trainable torch.nn.Parameter inside a torch.nn.Module while presenting a torch.Tensor-like interface.

Parameters:

  • data (Any) –

    Initial value, should be a tensor or convertible to a tensor.

  • requires_grad (bool, default: True ) –

    Whether the parameter requires gradients, by default True.

Examples:

You can use Parameter as a trainable parameter in any SVETlANNa element when it is typed as OptimizableFloat or OptimizableTensor:

1
2
3
4
5
6
7
8
9
import svetlanna as sv
import torch

sim_params = sv.SimulationParameters(...)

diffractive_layer = sv.elements.DiffractiveLayer(
    simulation_parameters=sim_params,
    mask=sv.Parameter(2 * torch.pi * torch.rand(Ny, Nx)),
)

svetlanna.ConstrainedParameter

ConstrainedParameter(
    data: Any,
    min_value: Any,
    max_value: Any,
    bound_func: Callable[[Tensor], Tensor] = sigmoid,
    inv_bound_func: Callable[[Tensor], Tensor] = logit,
    requires_grad: bool = True,
)

Bases: Parameter

Parameter constrained to a bounded range.

The constraint is implemented by applying bound_func to the inner parameter, mapping it to \([0, 1]\), and then scaling and shifting it to (min_value, max_value).

Parameters:

  • data (Any) –

    Initial parameter value.

  • min_value (Any) –

    Minimum allowed value.

  • max_value (Any) –

    Maximum allowed value.

  • bound_func (Callable[[Tensor], Tensor], default: sigmoid ) –

    Function that maps \(\mathbb{R}\to[0,1]\), by default torch.sigmoid.

  • inv_bound_func (Callable[[Tensor], Tensor], default: logit ) –

    Inverse of bound_func, by default torch.logit. It is used once to compute the initial inner parameter value from data.

  • requires_grad (bool, default: True ) –

    Whether the parameter requires gradients, by default True.

Examples:

You can use ConstrainedParameter as a trainable parameter in any SVETlANNa element when it is typed as OptimizableFloat or OptimizableTensor:

import svetlanna as sv
import torch

sim_params = sv.SimulationParameters(...)

diffractive_layer = sv.elements.DiffractiveLayer(
    simulation_parameters=sim_params,
    mask=sv.ConstrainedParameter(
        2 * torch.pi * torch.rand(Ny, Nx),
        min_value=0,
        max_value=2 * torch.pi,
    )
)

value property

value: Tensor

Constrained parameter value.

Returns:

  • Tensor

    Constrained value computed with bound_func.

svetlanna.parameters.OptimizableFloat module-attribute

OptimizableFloat: TypeAlias = (
    float | Tensor | Parameter | Parameter
)

Union type for scalar values that can be optimized. Accepts Python floats, scalar tensors, torch.nn.Parameter, or Parameter instances.

svetlanna.parameters.OptimizableTensor module-attribute

OptimizableTensor: TypeAlias = (
    Tensor | Parameter | Parameter
)

Union type for tensor values that can be optimized. Accepts tensor values, torch.nn.Parameter, or Parameter instances.