#[non_exhaustive]pub struct SyncBatchNorm2d<T: Float> {
pub num_features: usize,
pub eps: f64,
pub momentum: f64,
pub affine: bool,
pub weight: Option<Parameter<T>>,
pub bias: Option<Parameter<T>>,
/* private fields */
}Expand description
2-D synchronized batch normalization.
Same API surface as BatchNorm2d plus an Arc<dyn Backend> for
cross-rank communication. When world_size == 1 (or no backend is
provided), behaves exactly like a plain BatchNorm2d.
Marked #[non_exhaustive] so future configuration knobs (e.g.,
running-stats sync mode, momentum schedule, fused fwd/bwd flags) can
be added without breaking external struct-literal construction.
Construct via SyncBatchNorm2d::new / SyncBatchNorm2d::with_backend.
Fields (Non-exhaustive)§
This struct is marked as non-exhaustive
Struct { .. } syntax; cannot be matched against without a wildcard ..; and struct update syntax will not work.num_features: usize§eps: f64§momentum: f64§affine: bool§weight: Option<Parameter<T>>§bias: Option<Parameter<T>>Implementations§
Source§impl<T: Float> SyncBatchNorm2d<T>
impl<T: Float> SyncBatchNorm2d<T>
Sourcepub fn new(
num_features: usize,
eps: f64,
momentum: f64,
affine: bool,
) -> FerrotorchResult<Self>
pub fn new( num_features: usize, eps: f64, momentum: f64, affine: bool, ) -> FerrotorchResult<Self>
Create a new SyncBatchNorm2d with no backend (acts as a plain
BatchNorm2d). Use with_backend to attach
the process group.
Sourcepub fn with_backend(self, backend: Arc<dyn Backend>) -> Self
pub fn with_backend(self, backend: Arc<dyn Backend>) -> Self
Attach a backend so the layer synchronizes its statistics across the distributed process group.
Sourcepub fn running_mean(&self) -> Vec<f64>
pub fn running_mean(&self) -> Vec<f64>
Snapshot of the current per-channel running mean.
Sourcepub fn running_var(&self) -> Vec<f64>
pub fn running_var(&self) -> Vec<f64>
Snapshot of the current per-channel running variance.
Sourcepub fn num_batches_tracked(&self) -> usize
pub fn num_batches_tracked(&self) -> usize
Number of training batches processed so far.
Trait Implementations§
Source§impl<T: Float> Debug for SyncBatchNorm2d<T>
impl<T: Float> Debug for SyncBatchNorm2d<T>
Source§impl<T: Float> Module<T> for SyncBatchNorm2d<T>
impl<T: Float> Module<T> for SyncBatchNorm2d<T>
Source§fn forward(&self, input: &Tensor<T>) -> FerrotorchResult<Tensor<T>>
fn forward(&self, input: &Tensor<T>) -> FerrotorchResult<Tensor<T>>
Source§fn parameters(&self) -> Vec<&Parameter<T>>
fn parameters(&self) -> Vec<&Parameter<T>>
Source§fn parameters_mut(&mut self) -> Vec<&mut Parameter<T>>
fn parameters_mut(&mut self) -> Vec<&mut Parameter<T>>
Source§fn named_parameters(&self) -> Vec<(String, &Parameter<T>)>
fn named_parameters(&self) -> Vec<(String, &Parameter<T>)>
Source§fn is_training(&self) -> bool
fn is_training(&self) -> bool
Source§fn to_device(&mut self, device: Device) -> Result<(), FerrotorchError>
fn to_device(&mut self, device: Device) -> Result<(), FerrotorchError>
Source§fn state_dict(&self) -> HashMap<String, Tensor<T>>
fn state_dict(&self) -> HashMap<String, Tensor<T>>
Source§fn buffers(&self) -> Vec<&Buffer<T>>
fn buffers(&self) -> Vec<&Buffer<T>>
Source§fn buffers_mut(&mut self) -> Vec<&mut Buffer<T>>
fn buffers_mut(&mut self) -> Vec<&mut Buffer<T>>
Source§fn named_buffers(&self) -> Vec<(String, &Buffer<T>)>
fn named_buffers(&self) -> Vec<(String, &Buffer<T>)>
Source§fn as_any(&self) -> Option<&(dyn Any + 'static)>
fn as_any(&self) -> Option<&(dyn Any + 'static)>
Source§fn children(&self) -> Vec<&dyn Module<T>>
fn children(&self) -> Vec<&dyn Module<T>>
Source§fn named_children(&self) -> Vec<(String, &dyn Module<T>)>
fn named_children(&self) -> Vec<(String, &dyn Module<T>)>
Source§fn modules(&self) -> Vec<&dyn Module<T>>where
Self: Sized,
fn modules(&self) -> Vec<&dyn Module<T>>where
Self: Sized,
Source§fn descendants_dyn(&self) -> Vec<&dyn Module<T>>
fn descendants_dyn(&self) -> Vec<&dyn Module<T>>
self in depth-first order. Object-safe.Source§fn named_modules(&self) -> Vec<(String, &dyn Module<T>)>where
Self: Sized,
fn named_modules(&self) -> Vec<(String, &dyn Module<T>)>where
Self: Sized,
""; children paths are joined with ..Source§fn named_descendants_dyn(&self) -> Vec<(String, &dyn Module<T>)>
fn named_descendants_dyn(&self) -> Vec<(String, &dyn Module<T>)>
Source§fn with_forward_hook(
self,
hook: Box<dyn Fn(&Tensor<T>, &Tensor<T>) + Sync + Send>,
) -> (HookedModule<Self, T>, HookHandle)where
Self: Sized,
fn with_forward_hook(
self,
hook: Box<dyn Fn(&Tensor<T>, &Tensor<T>) + Sync + Send>,
) -> (HookedModule<Self, T>, HookHandle)where
Self: Sized,
HookedModule and register a forward hook.
Returns the wrapper paired with a HookHandle that can be used to
remove the hook later. The wrapper implements Module<T> itself, so
it slots into any place the original module did. Mirrors
torch.nn.Module.register_forward_hook.Source§fn with_forward_pre_hook(
self,
hook: Box<dyn Fn(&Tensor<T>) -> Result<Tensor<T>, FerrotorchError> + Sync + Send>,
) -> (HookedModule<Self, T>, HookHandle)where
Self: Sized,
fn with_forward_pre_hook(
self,
hook: Box<dyn Fn(&Tensor<T>) -> Result<Tensor<T>, FerrotorchError> + Sync + Send>,
) -> (HookedModule<Self, T>, HookHandle)where
Self: Sized,
HookedModule and register a forward
pre-hook. See Self::with_forward_hook. Mirrors
torch.nn.Module.register_forward_pre_hook.Source§fn with_backward_hook(
self,
hook: Box<dyn Fn(&Tensor<T>, &Tensor<T>) + Sync + Send>,
) -> (HookedModule<Self, T>, HookHandle)where
Self: Sized,
fn with_backward_hook(
self,
hook: Box<dyn Fn(&Tensor<T>, &Tensor<T>) + Sync + Send>,
) -> (HookedModule<Self, T>, HookHandle)where
Self: Sized,
HookedModule and register a backward hook.
See Self::with_forward_hook. Mirrors
torch.nn.Module.register_backward_hook.Source§fn zero_grad(&self) -> Result<(), FerrotorchError>
fn zero_grad(&self) -> Result<(), FerrotorchError>
None. Read moreSource§fn requires_grad_(&mut self, requires_grad: bool)
fn requires_grad_(&mut self, requires_grad: bool)
requires_grad on every parameter (freeze / unfreeze the
module). Mirrors torch.nn.Module.requires_grad_.Source§fn apply_to_parameters(&mut self, f: &mut dyn FnMut(&mut Parameter<T>))
fn apply_to_parameters(&mut self, f: &mut dyn FnMut(&mut Parameter<T>))
torch.nn.Module.apply for the parameter case (true apply recurses
over all submodules; the recursive form requires &mut dyn Module
which conflicts with this trait’s &mut self borrow). Read moreAuto Trait Implementations§
impl<T> !Freeze for SyncBatchNorm2d<T>
impl<T> !RefUnwindSafe for SyncBatchNorm2d<T>
impl<T> Send for SyncBatchNorm2d<T>
impl<T> Sync for SyncBatchNorm2d<T>
impl<T> Unpin for SyncBatchNorm2d<T>
impl<T> UnsafeUnpin for SyncBatchNorm2d<T>
impl<T> !UnwindSafe for SyncBatchNorm2d<T>
Blanket Implementations§
Source§impl<T> BorrowMut<T> for Twhere
T: ?Sized,
impl<T> BorrowMut<T> for Twhere
T: ?Sized,
Source§fn borrow_mut(&mut self) -> &mut T
fn borrow_mut(&mut self) -> &mut T
Source§impl<T> DistributionExt for Twhere
T: ?Sized,
impl<T> DistributionExt for Twhere
T: ?Sized,
Source§impl<T> Instrument for T
impl<T> Instrument for T
Source§fn instrument(self, span: Span) -> Instrumented<Self>
fn instrument(self, span: Span) -> Instrumented<Self>
Source§fn in_current_span(self) -> Instrumented<Self>
fn in_current_span(self) -> Instrumented<Self>
Source§impl<T> IntoEither for T
impl<T> IntoEither for T
Source§fn into_either(self, into_left: bool) -> Either<Self, Self>
fn into_either(self, into_left: bool) -> Either<Self, Self>
self into a Left variant of Either<Self, Self>
if into_left is true.
Converts self into a Right variant of Either<Self, Self>
otherwise. Read moreSource§fn into_either_with<F>(self, into_left: F) -> Either<Self, Self>
fn into_either_with<F>(self, into_left: F) -> Either<Self, Self>
self into a Left variant of Either<Self, Self>
if into_left(&self) returns true.
Converts self into a Right variant of Either<Self, Self>
otherwise. Read more