pub struct Param<T>where
T: Parameter,{
pub id: ParamId,
/* private fields */
}
Expand description
Parameters are the fundamental building blocks of modules where they serve as containers for tensors that can be updated during training, and loaded during inference. If you don’t want to save the tensors with a record and/or don’t want to update it during training, you don’t need this type to wrap your tensor.
§Laziness
The initialization of parameters can be lazy when created using uninitialized, which can be done using an initializer.
This reduces the amount of allocations done when loading a model for inference without having to create a custom initialization function only for inference.
§Example
let device = Device::default();
let config = ModuleConfig::default();
let record = Recorder::new().load("/path/to/module", &device);
// No tensor allocation
let module = config.init(device);
// Will use the tensor allocated for the record if the same device is used.
let module = module.load_record(record);
Fields§
§id: ParamId
The unique ID of this parameter. This is used by eg. optimizers to associate a gradient with a specific parameter.
Implementations§
§impl<T> Param<T>where
T: Parameter,
impl<T> Param<T>where
T: Parameter,
pub fn initialized(id: ParamId, value: T) -> Param<T>
pub fn initialized(id: ParamId, value: T) -> Param<T>
Create a new parameter that is already initialized.
pub fn uninitialized<F>(
id: ParamId,
init: F,
device: <T as Parameter>::Device,
is_require_grad: bool,
) -> Param<T>
pub fn uninitialized<F>( id: ParamId, init: F, device: <T as Parameter>::Device, is_require_grad: bool, ) -> Param<T>
Create a new parameter that is not already initialized.
pub fn val(&self) -> T
pub fn val(&self) -> T
Gets the parameter value.
pub fn into_value(self) -> T
pub fn into_value(self) -> T
Gets the parameter’s value while consuming the parameter.
pub fn map<F>(self, func: F) -> Param<T>where
F: Fn(T) -> T,
pub fn map<F>(self, func: F) -> Param<T>where
F: Fn(T) -> T,
Execute the given function on the inner value.
pub fn set_require_grad(self, require_grad: bool) -> Param<T>
pub fn set_require_grad(self, require_grad: bool) -> Param<T>
Override the gradient requirement for the current parameter.
§impl<B, const D: usize> Param<Tensor<B, D>>where
B: Backend,
impl<B, const D: usize> Param<Tensor<B, D>>where
B: Backend,
pub fn from_tensor(value: Tensor<B, D>) -> Param<Tensor<B, D>>
pub fn from_tensor(value: Tensor<B, D>) -> Param<Tensor<B, D>>
Create a new parameter from a float tensor.
§Warnings
We strongly recommend using Param::uninitialized if you are using this method to initialize parameters inside a module, since the tensor initialization will be lazy, making the loading of weights more performant.
Trait Implementations§
§impl<const D: usize, B> AutodiffModule<B> for Param<Tensor<B, D>>where
B: AutodiffBackend,
impl<const D: usize, B> AutodiffModule<B> for Param<Tensor<B, D>>where
B: AutodiffBackend,
§type InnerModule = Param<Tensor<<B as AutodiffBackend>::InnerBackend, D>>
type InnerModule = Param<Tensor<<B as AutodiffBackend>::InnerBackend, D>>
§fn valid(&self) -> <Param<Tensor<B, D>> as AutodiffModule<B>>::InnerModule
fn valid(&self) -> <Param<Tensor<B, D>> as AutodiffModule<B>>::InnerModule
§impl<const D: usize, B> AutodiffModule<B> for Param<Tensor<B, D, Bool>>where
B: AutodiffBackend,
impl<const D: usize, B> AutodiffModule<B> for Param<Tensor<B, D, Bool>>where
B: AutodiffBackend,
§type InnerModule = Param<Tensor<<B as AutodiffBackend>::InnerBackend, D, Bool>>
type InnerModule = Param<Tensor<<B as AutodiffBackend>::InnerBackend, D, Bool>>
§fn valid(&self) -> <Param<Tensor<B, D, Bool>> as AutodiffModule<B>>::InnerModule
fn valid(&self) -> <Param<Tensor<B, D, Bool>> as AutodiffModule<B>>::InnerModule
§impl<const D: usize, B> AutodiffModule<B> for Param<Tensor<B, D, Int>>where
B: AutodiffBackend,
impl<const D: usize, B> AutodiffModule<B> for Param<Tensor<B, D, Int>>where
B: AutodiffBackend,
§type InnerModule = Param<Tensor<<B as AutodiffBackend>::InnerBackend, D, Int>>
type InnerModule = Param<Tensor<<B as AutodiffBackend>::InnerBackend, D, Int>>
§fn valid(&self) -> <Param<Tensor<B, D, Int>> as AutodiffModule<B>>::InnerModule
fn valid(&self) -> <Param<Tensor<B, D, Int>> as AutodiffModule<B>>::InnerModule
§impl<const D: usize, B> Module<B> for Param<Tensor<B, D>>where
B: Backend,
impl<const D: usize, B> Module<B> for Param<Tensor<B, D>>where
B: Backend,
§fn visit<V>(&self, visitor: &mut V)where
V: ModuleVisitor<B>,
fn visit<V>(&self, visitor: &mut V)where
V: ModuleVisitor<B>,
§fn map<M>(self, mapper: &mut M) -> Param<Tensor<B, D>>where
M: ModuleMapper<B>,
fn map<M>(self, mapper: &mut M) -> Param<Tensor<B, D>>where
M: ModuleMapper<B>,
§fn into_record(self) -> <Param<Tensor<B, D>> as Module<B>>::Record
fn into_record(self) -> <Param<Tensor<B, D>> as Module<B>>::Record
§fn load_record(
self,
record: <Param<Tensor<B, D>> as Module<B>>::Record,
) -> Param<Tensor<B, D>>
fn load_record( self, record: <Param<Tensor<B, D>> as Module<B>>::Record, ) -> Param<Tensor<B, D>>
§fn to_device(self, device: &<B as Backend>::Device) -> Param<Tensor<B, D>>
fn to_device(self, device: &<B as Backend>::Device) -> Param<Tensor<B, D>>
§fn fork(self, device: &<B as Backend>::Device) -> Param<Tensor<B, D>>
fn fork(self, device: &<B as Backend>::Device) -> Param<Tensor<B, D>>
§fn collect_devices(
&self,
devices: Vec<<B as Backend>::Device>,
) -> Vec<<B as Backend>::Device>
fn collect_devices( &self, devices: Vec<<B as Backend>::Device>, ) -> Vec<<B as Backend>::Device>
§fn devices(&self) -> Vec<<B as Backend>::Device>
fn devices(&self) -> Vec<<B as Backend>::Device>
§fn num_params(&self) -> usize
fn num_params(&self) -> usize
§fn save_file<FR, PB>(
self,
file_path: PB,
recorder: &FR,
) -> Result<(), RecorderError>
fn save_file<FR, PB>( self, file_path: PB, recorder: &FR, ) -> Result<(), RecorderError>
§fn load_file<FR, PB>(
self,
file_path: PB,
recorder: &FR,
device: &<B as Backend>::Device,
) -> Result<Self, RecorderError>
fn load_file<FR, PB>( self, file_path: PB, recorder: &FR, device: &<B as Backend>::Device, ) -> Result<Self, RecorderError>
§fn quantize_weights<C>(self, quantizer: &mut Quantizer<C>) -> Selfwhere
C: Calibration,
fn quantize_weights<C>(self, quantizer: &mut Quantizer<C>) -> Selfwhere
C: Calibration,
§impl<const D: usize, B> Module<B> for Param<Tensor<B, D, Bool>>where
B: Backend,
impl<const D: usize, B> Module<B> for Param<Tensor<B, D, Bool>>where
B: Backend,
§fn visit<V>(&self, visitor: &mut V)where
V: ModuleVisitor<B>,
fn visit<V>(&self, visitor: &mut V)where
V: ModuleVisitor<B>,
§fn map<M>(self, mapper: &mut M) -> Param<Tensor<B, D, Bool>>where
M: ModuleMapper<B>,
fn map<M>(self, mapper: &mut M) -> Param<Tensor<B, D, Bool>>where
M: ModuleMapper<B>,
§fn into_record(self) -> <Param<Tensor<B, D, Bool>> as Module<B>>::Record
fn into_record(self) -> <Param<Tensor<B, D, Bool>> as Module<B>>::Record
§fn load_record(
self,
record: <Param<Tensor<B, D, Bool>> as Module<B>>::Record,
) -> Param<Tensor<B, D, Bool>>
fn load_record( self, record: <Param<Tensor<B, D, Bool>> as Module<B>>::Record, ) -> Param<Tensor<B, D, Bool>>
§fn to_device(self, device: &<B as Backend>::Device) -> Param<Tensor<B, D, Bool>>
fn to_device(self, device: &<B as Backend>::Device) -> Param<Tensor<B, D, Bool>>
§fn fork(self, device: &<B as Backend>::Device) -> Param<Tensor<B, D, Bool>>
fn fork(self, device: &<B as Backend>::Device) -> Param<Tensor<B, D, Bool>>
§fn collect_devices(
&self,
devices: Vec<<B as Backend>::Device>,
) -> Vec<<B as Backend>::Device>
fn collect_devices( &self, devices: Vec<<B as Backend>::Device>, ) -> Vec<<B as Backend>::Device>
§fn devices(&self) -> Vec<<B as Backend>::Device>
fn devices(&self) -> Vec<<B as Backend>::Device>
§fn num_params(&self) -> usize
fn num_params(&self) -> usize
§fn save_file<FR, PB>(
self,
file_path: PB,
recorder: &FR,
) -> Result<(), RecorderError>
fn save_file<FR, PB>( self, file_path: PB, recorder: &FR, ) -> Result<(), RecorderError>
§fn load_file<FR, PB>(
self,
file_path: PB,
recorder: &FR,
device: &<B as Backend>::Device,
) -> Result<Self, RecorderError>
fn load_file<FR, PB>( self, file_path: PB, recorder: &FR, device: &<B as Backend>::Device, ) -> Result<Self, RecorderError>
§fn quantize_weights<C>(self, quantizer: &mut Quantizer<C>) -> Selfwhere
C: Calibration,
fn quantize_weights<C>(self, quantizer: &mut Quantizer<C>) -> Selfwhere
C: Calibration,
§impl<const D: usize, B> Module<B> for Param<Tensor<B, D, Int>>where
B: Backend,
impl<const D: usize, B> Module<B> for Param<Tensor<B, D, Int>>where
B: Backend,
§fn visit<V>(&self, visitor: &mut V)where
V: ModuleVisitor<B>,
fn visit<V>(&self, visitor: &mut V)where
V: ModuleVisitor<B>,
§fn map<M>(self, mapper: &mut M) -> Param<Tensor<B, D, Int>>where
M: ModuleMapper<B>,
fn map<M>(self, mapper: &mut M) -> Param<Tensor<B, D, Int>>where
M: ModuleMapper<B>,
§fn into_record(self) -> <Param<Tensor<B, D, Int>> as Module<B>>::Record
fn into_record(self) -> <Param<Tensor<B, D, Int>> as Module<B>>::Record
§fn load_record(
self,
record: <Param<Tensor<B, D, Int>> as Module<B>>::Record,
) -> Param<Tensor<B, D, Int>>
fn load_record( self, record: <Param<Tensor<B, D, Int>> as Module<B>>::Record, ) -> Param<Tensor<B, D, Int>>
§fn to_device(self, device: &<B as Backend>::Device) -> Param<Tensor<B, D, Int>>
fn to_device(self, device: &<B as Backend>::Device) -> Param<Tensor<B, D, Int>>
§fn fork(self, device: &<B as Backend>::Device) -> Param<Tensor<B, D, Int>>
fn fork(self, device: &<B as Backend>::Device) -> Param<Tensor<B, D, Int>>
§fn collect_devices(
&self,
devices: Vec<<B as Backend>::Device>,
) -> Vec<<B as Backend>::Device>
fn collect_devices( &self, devices: Vec<<B as Backend>::Device>, ) -> Vec<<B as Backend>::Device>
§fn devices(&self) -> Vec<<B as Backend>::Device>
fn devices(&self) -> Vec<<B as Backend>::Device>
§fn num_params(&self) -> usize
fn num_params(&self) -> usize
§fn save_file<FR, PB>(
self,
file_path: PB,
recorder: &FR,
) -> Result<(), RecorderError>
fn save_file<FR, PB>( self, file_path: PB, recorder: &FR, ) -> Result<(), RecorderError>
§fn load_file<FR, PB>(
self,
file_path: PB,
recorder: &FR,
device: &<B as Backend>::Device,
) -> Result<Self, RecorderError>
fn load_file<FR, PB>( self, file_path: PB, recorder: &FR, device: &<B as Backend>::Device, ) -> Result<Self, RecorderError>
§fn quantize_weights<C>(self, quantizer: &mut Quantizer<C>) -> Selfwhere
C: Calibration,
fn quantize_weights<C>(self, quantizer: &mut Quantizer<C>) -> Selfwhere
C: Calibration,
§impl<const D: usize, B> ModuleDisplay for Param<Tensor<B, D>>where
B: Backend,
impl<const D: usize, B> ModuleDisplay for Param<Tensor<B, D>>where
B: Backend,
§fn format(&self, passed_settings: DisplaySettings) -> String
fn format(&self, passed_settings: DisplaySettings) -> String
§fn custom_settings(&self) -> Option<DisplaySettings>
fn custom_settings(&self) -> Option<DisplaySettings>
§impl<const D: usize, B> ModuleDisplay for Param<Tensor<B, D, Bool>>where
B: Backend,
impl<const D: usize, B> ModuleDisplay for Param<Tensor<B, D, Bool>>where
B: Backend,
§fn format(&self, passed_settings: DisplaySettings) -> String
fn format(&self, passed_settings: DisplaySettings) -> String
§fn custom_settings(&self) -> Option<DisplaySettings>
fn custom_settings(&self) -> Option<DisplaySettings>
§impl<const D: usize, B> ModuleDisplay for Param<Tensor<B, D, Int>>where
B: Backend,
impl<const D: usize, B> ModuleDisplay for Param<Tensor<B, D, Int>>where
B: Backend,
§fn format(&self, passed_settings: DisplaySettings) -> String
fn format(&self, passed_settings: DisplaySettings) -> String
§fn custom_settings(&self) -> Option<DisplaySettings>
fn custom_settings(&self) -> Option<DisplaySettings>
§impl<B, const D: usize> Record<B> for Param<Tensor<B, D>>where
B: Backend,
impl<B, const D: usize> Record<B> for Param<Tensor<B, D>>where
B: Backend,
§type Item<S: PrecisionSettings> = ParamSerde<FloatTensorSerde<S>>
type Item<S: PrecisionSettings> = ParamSerde<FloatTensorSerde<S>>
§impl<B, const D: usize> Record<B> for Param<Tensor<B, D, Bool>>where
B: Backend,
impl<B, const D: usize> Record<B> for Param<Tensor<B, D, Bool>>where
B: Backend,
§type Item<S: PrecisionSettings> = ParamSerde<BoolTensorSerde>
type Item<S: PrecisionSettings> = ParamSerde<BoolTensorSerde>
§impl<B, const D: usize> Record<B> for Param<Tensor<B, D, Int>>where
B: Backend,
impl<B, const D: usize> Record<B> for Param<Tensor<B, D, Int>>where
B: Backend,
§type Item<S: PrecisionSettings> = ParamSerde<IntTensorSerde<S>>
type Item<S: PrecisionSettings> = ParamSerde<IntTensorSerde<S>>
Auto Trait Implementations§
impl<T> !Freeze for Param<T>
impl<T> !RefUnwindSafe for Param<T>
impl<T> Send for Param<T>
impl<T> !Sync for Param<T>
impl<T> Unpin for Param<T>
impl<T> UnwindSafe for Param<T>where
T: UnwindSafe,
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> CloneToUninit for Twhere
T: Clone,
impl<T> CloneToUninit for Twhere
T: Clone,
source§unsafe fn clone_to_uninit(&self, dst: *mut T)
unsafe fn clone_to_uninit(&self, dst: *mut T)
clone_to_uninit
)§impl<T> Instrument for T
impl<T> Instrument for T
§fn instrument(self, span: Span) -> Instrumented<Self>
fn instrument(self, span: Span) -> Instrumented<Self>
§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§impl<T> Pointable for T
impl<T> Pointable for T
§impl<T> ToCompactString for Twhere
T: Display,
impl<T> ToCompactString for Twhere
T: Display,
§fn try_to_compact_string(&self) -> Result<CompactString, ToCompactStringError>
fn try_to_compact_string(&self) -> Result<CompactString, ToCompactStringError>
ToCompactString::to_compact_string()
] Read more§fn to_compact_string(&self) -> CompactString
fn to_compact_string(&self) -> CompactString
CompactString
]. Read more