class
LazyBatchNorm1d
extends
_LazyBatchNormMixinLazyBatchNorm1d(eps: float = 1e-05, momentum: float | None = 0.1, affine: bool = True, track_running_stats: bool = True, device: DeviceLike = None, dtype: DTypeLike = None)BatchNorm1d with lazy num_features inference.
Identical to BatchNorm1d except that num_features need
not be specified at construction time. On the first call to
forward(x), num_features is automatically set to
x.shape[1] and all parameters and buffers are allocated.
This is convenient when the number of channels is not known at model definition time, for example when building networks programmatically or when constructing sub-modules before the input shape is fixed.
Parameters
epsfloat= 1e-05Numerical stability constant. Default:
1e-5.momentumfloat or None= 0.1EMA factor for running statistics.
None uses cumulative
averaging. Default: 0.1.affinebool= TrueIf
True, lazily allocates learnable scale and shift.
Default: True.track_running_statsbool= TrueIf
True, lazily allocates running mean/variance and
batch counter. Default: True.deviceDeviceLike= NoneDevice for lazily allocated tensors. Default:
None.dtypeDTypeLike= NoneData type for lazily allocated tensors. Default:
None.Notes
- Input: or — same as
BatchNorm1d.Cis inferred on the first forward pass. - Output: same shape as the input.
Examples
Construct without specifying the channel count:
>>> import lucid
>>> import lucid.nn as nn
>>> bn = nn.LazyBatchNorm1d()
>>> x = lucid.randn(16, 64, 100) # (N, C, L)
>>> out = bn(x) # num_features=64 is inferred here
>>> out.shape
(16, 64, 100)
Reload from a checkpoint saved by a :class:`BatchNorm1d`:
>>> bn2 = nn.LazyBatchNorm1d()
>>> # bn2.load_state_dict(state) # num_features inferred from saved tensors