pub struct ModuleDict<T: Float> { /* private fields */ }Expand description
An ordered dictionary of named modules, registered for parameter tracking.
Uses a Vec<(String, Box<dyn Module<T>>)> internally to preserve
insertion order without requiring an external dependency like IndexMap.
Like ModuleList, ModuleDict does not define a forward pass.
Users look up modules by key and call forward() manually. This mirrors
PyTorch’s nn.ModuleDict.
§Named parameters
Parameters are prefixed by their dictionary key: "encoder.weight",
"decoder.weight", etc.
§Examples
ⓘ
fn example(input: &Tensor<f32>) -> Result<Tensor<f32>, FerrotorchError> {
let mut dict = ModuleDict::<f32>::new();
dict.insert("encoder", Box::new(Linear::<f32>::new(784, 256, true)?));
dict.insert("decoder", Box::new(Linear::<f32>::new(256, 784, true)?));
let encoder = dict.get("encoder").ok_or_else(|| FerrotorchError::InvalidArgument {
message: "missing 'encoder' module".into(),
})?;
let decoder = dict.get("decoder").ok_or_else(|| FerrotorchError::InvalidArgument {
message: "missing 'decoder' module".into(),
})?;
let encoded = encoder.forward(input)?;
decoder.forward(&encoded)
}Implementations§
Source§impl<T: Float> ModuleDict<T>
impl<T: Float> ModuleDict<T>
Sourcepub fn insert(&mut self, key: impl Into<String>, module: Box<dyn Module<T>>)
pub fn insert(&mut self, key: impl Into<String>, module: Box<dyn Module<T>>)
Insert a module with the given key.
If a module with the same key already exists, it is replaced (preserving insertion position).
Sourcepub fn get(&self, key: &str) -> Option<&dyn Module<T>>
pub fn get(&self, key: &str) -> Option<&dyn Module<T>>
Get a reference to the module with the given key.
Trait Implementations§
Source§impl<T: Float> Default for ModuleDict<T>
impl<T: Float> Default for ModuleDict<T>
Source§impl<T: Float> Display for ModuleDict<T>
impl<T: Float> Display for ModuleDict<T>
Source§impl<T: Float> Module<T> for ModuleDict<T>
impl<T: Float> Module<T> for ModuleDict<T>
Source§fn forward(&self, _input: &Tensor<T>) -> FerrotorchResult<Tensor<T>>
fn forward(&self, _input: &Tensor<T>) -> FerrotorchResult<Tensor<T>>
ModuleDict does not implement forward.
Users should look up modules by key and call forward() manually.
Source§fn parameters(&self) -> Vec<&Parameter<T>>
fn parameters(&self) -> Vec<&Parameter<T>>
Iterate over all learnable parameters.
Source§fn parameters_mut(&mut self) -> Vec<&mut Parameter<T>>
fn parameters_mut(&mut self) -> Vec<&mut Parameter<T>>
Iterate over all learnable parameters mutably.
Source§fn named_parameters(&self) -> Vec<(String, &Parameter<T>)>
fn named_parameters(&self) -> Vec<(String, &Parameter<T>)>
Named parameters for state dict serialization. Read more
Source§fn is_training(&self) -> bool
fn is_training(&self) -> bool
Whether the module is in training mode.
Source§fn to_device(&mut self, device: Device) -> FerrotorchResult<()>
fn to_device(&mut self, device: Device) -> FerrotorchResult<()>
Move all parameters and buffers to a device. Read more
Source§fn state_dict(&self) -> StateDict<T>
fn state_dict(&self) -> StateDict<T>
Export parameters and buffers as a state dict (torch parity). Read more
Source§fn buffers(&self) -> Vec<&Buffer<T>>
fn buffers(&self) -> Vec<&Buffer<T>>
Iterate over all non-trainable buffers (e.g. running mean / variance
in BatchNorm). Default returns empty — concrete modules with buffers
override.
Source§fn buffers_mut(&mut self) -> Vec<&mut Buffer<T>>
fn buffers_mut(&mut self) -> Vec<&mut Buffer<T>>
Mutable iteration over all buffers. Default returns empty.
Source§fn named_buffers(&self) -> Vec<(String, &Buffer<T>)>
fn named_buffers(&self) -> Vec<(String, &Buffer<T>)>
Named buffers (dot-separated paths for nested modules). Default
returns empty.
Source§fn as_any(&self) -> Option<&dyn Any>
fn as_any(&self) -> Option<&dyn Any>
Downcast hook for type-erased buffer-loader dispatch. (#984) Read more
Source§fn children(&self) -> Vec<&dyn Module<T>>
fn children(&self) -> Vec<&dyn Module<T>>
Direct child modules. Default returns empty (leaf module).
Source§fn named_children(&self) -> Vec<(String, &dyn Module<T>)>
fn named_children(&self) -> Vec<(String, &dyn Module<T>)>
Direct child modules with their attribute names. Default returns
empty.
Source§fn modules(&self) -> Vec<&dyn Module<T>>where
Self: Sized,
fn modules(&self) -> Vec<&dyn Module<T>>where
Self: Sized,
All modules in this subtree, depth-first (self first, then each
child’s descendants in order). Read more
Source§fn descendants_dyn(&self) -> Vec<&dyn Module<T>>
fn descendants_dyn(&self) -> Vec<&dyn Module<T>>
All strict descendants of
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,
All modules in this subtree with dot-separated path names. The root
is named
""; 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>)>
Strict descendants with dot-paths. Object-safe.
Source§fn with_forward_hook(
self,
hook: ForwardHook<T>,
) -> (HookedModule<Self, T>, HookHandle)where
Self: Sized,
fn with_forward_hook(
self,
hook: ForwardHook<T>,
) -> (HookedModule<Self, T>, HookHandle)where
Self: Sized,
Wrap this module in a
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: ForwardPreHook<T>,
) -> (HookedModule<Self, T>, HookHandle)where
Self: Sized,
fn with_forward_pre_hook(
self,
hook: ForwardPreHook<T>,
) -> (HookedModule<Self, T>, HookHandle)where
Self: Sized,
Wrap this module in a
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: BackwardHook<T>,
) -> (HookedModule<Self, T>, HookHandle)where
Self: Sized,
fn with_backward_hook(
self,
hook: BackwardHook<T>,
) -> (HookedModule<Self, T>, HookHandle)where
Self: Sized,
Wrap this module in a
HookedModule and register a backward hook.
See Self::with_forward_hook. Mirrors
torch.nn.Module.register_backward_hook.Source§fn zero_grad(&self) -> FerrotorchResult<()>
fn zero_grad(&self) -> FerrotorchResult<()>
Set the gradient of every parameter to
None. Read moreSource§fn requires_grad_(&mut self, requires_grad: bool)
fn requires_grad_(&mut self, requires_grad: bool)
Toggle
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>))
Apply a function to every parameter in this module. Mirrors
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 moreSource§fn load_state_dict(
&mut self,
state: &StateDict<T>,
strict: bool,
) -> FerrotorchResult<()>
fn load_state_dict( &mut self, state: &StateDict<T>, strict: bool, ) -> FerrotorchResult<()>
Load parameters from a state dict. Read more
Auto Trait Implementations§
impl<T> !RefUnwindSafe for ModuleDict<T>
impl<T> !UnwindSafe for ModuleDict<T>
impl<T> Freeze for ModuleDict<T>
impl<T> Send for ModuleDict<T>
impl<T> Sync for ModuleDict<T>
impl<T> Unpin for ModuleDict<T>
impl<T> UnsafeUnpin for ModuleDict<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
Mutably borrows from an owned value. Read more
Source§impl<T> DistributionExt for Twhere
T: ?Sized,
impl<T> DistributionExt for Twhere
T: ?Sized,
impl<T, U> Imply<T> for U
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>
Converts
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>
Converts
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