Stimulus Optimization
Optimizer
optimize_stimulus
optimize_stimulus(
stimulus: Tensor,
optimizer_init_fn: Callable[[list[Tensor]], Optimizer],
objective_object,
optimization_stopper: OptimizationStopper,
stimulus_regularization_loss: list[
StimulusRegularizationLoss
]
| StimulusRegularizationLoss
| None = None,
stimulus_postprocessor: list[StimulusPostprocessor]
| StimulusPostprocessor
| None = None,
) -> None
Optimize a stimulus to maximize a given objective while minimizing a regularizing function. The stimulus is modified in place.
Source code in openretina/insilico/stimulus_optimization/optimizer.py
24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 | |
Objective
ResponseReducer
ResponseReducer(axis: int = 0)
Bases: ABC
Abstract base class for reducing a response tensor (e.g. over time) to a scalar objective value.
Source code in openretina/insilico/stimulus_optimization/objective.py
14 15 | |
SliceMeanReducer
SliceMeanReducer(axis: int, start: int, length: int)
Bases: ResponseReducer
Reduce by averaging over a temporal slice starting at start for length frames.
Source code in openretina/insilico/stimulus_optimization/objective.py
31 32 33 34 35 | |
AbstractObjective
AbstractObjective(model, data_key: str | None)
Bases: ABC
Base class for stimulus optimization objectives. Wraps a model and optional data_key for forward passes.
Source code in openretina/insilico/stimulus_optimization/objective.py
59 60 61 | |
IncreaseObjective
IncreaseObjective(
model,
neuron_indices: list[int] | int,
data_key: str | None,
response_reducer: ResponseReducer,
)
Bases: AbstractObjective
Objective that maximizes the mean response of specified neurons.
Source code in openretina/insilico/stimulus_optimization/objective.py
79 80 81 82 | |
InnerNeuronVisualizationObjective
InnerNeuronVisualizationObjective(
model,
data_key: str | None,
response_reducer: ResponseReducer,
)
Bases: AbstractObjective
Objective for visualizing feature preferences of individual channels in intermediate model layers via forward hooks.
Source code in openretina/insilico/stimulus_optimization/objective.py
121 122 123 124 125 126 | |
ContrastiveNeuronObjective
ContrastiveNeuronObjective(
model,
on_cluster_idc: list[int],
off_cluster_idc_list: list[list[int]],
data_key: str | None,
response_reducer: ResponseReducer,
temperature: float = 1.6,
)
Bases: AbstractObjective
Objective described in [Most discriminative stimuli for functional cell type clustering] (https://openreview.net/forum?id=9W6KaAcYlr)
Source code in openretina/insilico/stimulus_optimization/objective.py
188 189 190 191 192 193 194 195 196 197 198 199 200 201 | |
Regularizer
StimulusRegularizationLoss
Base class for regularization losses applied to the optimized stimulus. Default returns 0.
RangeRegularizationLoss
RangeRegularizationLoss(
min_max_values: Iterable[
tuple[float | None, float | None]
],
max_norm: float | None,
factor: float = 1.0,
)
Bases: StimulusRegularizationLoss
Penalizes stimulus values outside specified per-channel min/max ranges and optionally constrains total norm.
Source code in openretina/insilico/stimulus_optimization/regularizer.py
28 29 30 31 32 33 34 35 36 | |
forward
forward(stimulus: Tensor) -> Tensor
Penalizes the stimulus if it is outside the range defined by min_max_values.
Source code in openretina/insilico/stimulus_optimization/regularizer.py
38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 | |
StimulusPostprocessor
Base class for stimulus clippers.
process
process(x: Tensor) -> Tensor
x.shape: batch x channels x time x n_rows x n_cols
Source code in openretina/insilico/stimulus_optimization/regularizer.py
60 61 62 | |
ChangeNormJointlyClipRangeSeparately
ChangeNormJointlyClipRangeSeparately(
min_max_values: Iterable[
tuple[Optional[float], Optional[float]]
],
norm: float | None,
)
Bases: StimulusPostprocessor
First change the norm and afterward clip the value of x to some specified range
Source code in openretina/insilico/stimulus_optimization/regularizer.py
68 69 70 71 72 73 74 | |
TemporalGaussianLowPassFilterProcessor
TemporalGaussianLowPassFilterProcessor(
sigma: float, kernel_size: int, device: str = "cpu"
)
Bases: StimulusPostprocessor
Uses a 1d Gaussian filter to convolve the stimulus over the temporal dimension. This acts as a low pass filter.
Source code in openretina/insilico/stimulus_optimization/regularizer.py
107 108 109 110 111 112 113 114 | |
process
process(
x: Float[
Tensor, "batch_dim channels time height width"
],
) -> Tensor
Apply a Gaussian low-pass filter to the stimulus tensor along the temporal dimension.
| PARAMETER | DESCRIPTION |
|---|---|
x
|
Tensor of shape (batch_dim, channels, time_dim, height, width)
TYPE:
|
Returns: Tensor: The filtered stimulus tensor.
Source code in openretina/insilico/stimulus_optimization/regularizer.py
116 117 118 119 120 121 122 123 124 125 126 127 128 129 130 131 132 | |
Optimization Stopper
OptimizationStopper
OptimizationStopper(max_iterations: Optional[int])
Base stopping criterion for stimulus optimization. Stops after max_iterations.
Source code in openretina/insilico/stimulus_optimization/optimization_stopper.py
8 9 10 11 12 | |
EarlyStopper
EarlyStopper(
max_iterations: Optional[int] = None,
patience: int = 1,
min_delta: float = 0.0,
)
Bases: OptimizationStopper
Stops optimization when loss stops improving for patience consecutive steps.
Source code in openretina/insilico/stimulus_optimization/optimization_stopper.py
21 22 23 24 25 26 | |