ParallelOptimizer

Struct ParallelOptimizer 

Source
pub struct ParallelOptimizer<A, D>{ /* private fields */ }
Expand description

A parallel composition of optimizers

This applies different optimizers to different parameter groups. Each group of parameters is updated using its assigned optimizer.

§Example

use scirs2_core::ndarray::Array1;
use optirs_core::optimizer_composition::{ParallelOptimizer, ParameterGroup};
use optirs_core::optimizers::{SGD, Adam, Optimizer};

// Create optimizers
let sgd = SGD::new(0.1);
let adam = Adam::new(0.01);

// Create parameter groups
let params1 = Array1::zeros(3);
let params2 = Array1::zeros(5);

let group1 = ParameterGroup::new(params1, 0); // Use SGD
let group2 = ParameterGroup::new(params2, 1); // Use Adam

// Combine them in parallel
let mut parallel_optimizer = ParallelOptimizer::new(
    vec![Box::new(sgd), Box::new(adam)],
    vec![group1, group2],
);

// The step method will update all parameter groups using their assigned optimizers
// (In a real use case, you'd provide the corresponding gradients)

Implementations§

Source§

impl<A, D> ParallelOptimizer<A, D>

Source

pub fn new( optimizers: Vec<Box<dyn Optimizer<A, D>>>, parameter_groups: Vec<ParameterGroup<A, D>>, ) -> Self

Create a new parallel optimizer

§Arguments
  • optimizers - List of optimizers to use
  • parameter_groups - Groups of parameters with their assigned optimizer indices
Source

pub fn add_optimizer(&mut self, optimizer: Box<dyn Optimizer<A, D>>) -> usize

Add an optimizer

§Arguments
  • optimizer - The optimizer to add
§Returns

The index of the added optimizer

Source

pub fn add_parameter_group( &mut self, params: Array<A, D>, optimizerindex: usize, ) -> Result<usize>

Add a parameter group

§Arguments
  • params - The parameters in this group
  • optimizerindex - The index of the optimizer to use for this group
§Returns

Result with the index of the added parameter group, or an error if the optimizer index is invalid

Source

pub fn num_optimizers(&self) -> usize

Get the number of optimizers

Source

pub fn num_parameter_groups(&self) -> usize

Get the number of parameter groups

Source

pub fn get_optimizer(&self, index: usize) -> Option<&dyn Optimizer<A, D>>

Get a reference to an optimizer by index

§Arguments
  • index - The index of the optimizer
§Returns

A reference to the optimizer at the given index, or None if out of bounds

Source

pub fn get_optimizer_mut( &mut self, index: usize, ) -> Option<&mut dyn Optimizer<A, D>>

Get a mutable reference to an optimizer by index

§Arguments
  • index - The index of the optimizer
§Returns

A mutable reference to the optimizer at the given index, or None if out of bounds

Source

pub fn get_parameter_group(&self, index: usize) -> Option<&ParameterGroup<A, D>>

Get a reference to a parameter group by index

§Arguments
  • index - The index of the parameter group
§Returns

A reference to the parameter group at the given index, or None if out of bounds

Source

pub fn get_parameter_group_mut( &mut self, index: usize, ) -> Option<&mut ParameterGroup<A, D>>

Get a mutable reference to a parameter group by index

§Arguments
  • index - The index of the parameter group
§Returns

A mutable reference to the parameter group at the given index, or None if out of bounds

Source

pub fn get_all_parameters(&self) -> Result<Vec<Array<A, D>>>

Get all current parameter values as a single array

§Returns

A result containing all parameter values concatenated into a single array

Source

pub fn update_all_parameters( &mut self, gradients: &[Array<A, D>], ) -> Result<Vec<Array<A, D>>>

Update all parameter groups using their assigned optimizers

§Arguments
  • gradients - List of gradient arrays corresponding to parameter groups
§Returns

Result with the updated parameter values, or an error

Trait Implementations§

Source§

impl<A, D> Optimizer<A, D> for ParallelOptimizer<A, D>

Source§

fn step( &mut self, _params: &Array<A, D>, gradients: &Array<A, D>, ) -> Result<Array<A, D>>

Updates parameters using the given gradients Read more
Source§

fn step_list( &mut self, params_list: &[&Array<A, D>], gradients_list: &[&Array<A, D>], ) -> Result<Vec<Array<A, D>>>

Updates multiple parameter arrays at once Read more
Source§

fn get_learning_rate(&self) -> A

Gets the current learning rate
Source§

fn set_learning_rate(&mut self, learningrate: A)

Sets a new learning rate

Auto Trait Implementations§

§

impl<A, D> Freeze for ParallelOptimizer<A, D>

§

impl<A, D> !RefUnwindSafe for ParallelOptimizer<A, D>

§

impl<A, D> !Send for ParallelOptimizer<A, D>

§

impl<A, D> !Sync for ParallelOptimizer<A, D>

§

impl<A, D> Unpin for ParallelOptimizer<A, D>
where D: Unpin,

§

impl<A, D> !UnwindSafe for ParallelOptimizer<A, D>

Blanket Implementations§

Source§

impl<T> Any for T
where T: 'static + ?Sized,

Source§

fn type_id(&self) -> TypeId

Gets the TypeId of self. Read more
Source§

impl<T> Borrow<T> for T
where T: ?Sized,

Source§

fn borrow(&self) -> &T

Immutably borrows from an owned value. Read more
Source§

impl<T> BorrowMut<T> for T
where T: ?Sized,

Source§

fn borrow_mut(&mut self) -> &mut T

Mutably borrows from an owned value. Read more
Source§

impl<T> From<T> for T

Source§

fn from(t: T) -> T

Returns the argument unchanged.

Source§

impl<T, U> Into<U> for T
where U: From<T>,

Source§

fn into(self) -> U

Calls U::from(self).

That is, this conversion is whatever the implementation of From<T> for U chooses to do.

Source§

impl<T> IntoEither for T

Source§

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 more
Source§

fn into_either_with<F>(self, into_left: F) -> Either<Self, Self>
where F: FnOnce(&Self) -> bool,

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
Source§

impl<T> Pointable for T

Source§

const ALIGN: usize

The alignment of pointer.
Source§

type Init = T

The type for initializers.
Source§

unsafe fn init(init: <T as Pointable>::Init) -> usize

Initializes a with the given initializer. Read more
Source§

unsafe fn deref<'a>(ptr: usize) -> &'a T

Dereferences the given pointer. Read more
Source§

unsafe fn deref_mut<'a>(ptr: usize) -> &'a mut T

Mutably dereferences the given pointer. Read more
Source§

unsafe fn drop(ptr: usize)

Drops the object pointed to by the given pointer. Read more
Source§

impl<T> Same for T

Source§

type Output = T

Should always be Self
Source§

impl<SS, SP> SupersetOf<SS> for SP
where SS: SubsetOf<SP>,

Source§

fn to_subset(&self) -> Option<SS>

The inverse inclusion map: attempts to construct self from the equivalent element of its superset. Read more
Source§

fn is_in_subset(&self) -> bool

Checks if self is actually part of its subset T (and can be converted to it).
Source§

fn to_subset_unchecked(&self) -> SS

Use with care! Same as self.to_subset but without any property checks. Always succeeds.
Source§

fn from_subset(element: &SS) -> SP

The inclusion map: converts self to the equivalent element of its superset.
Source§

impl<T, U> TryFrom<U> for T
where U: Into<T>,

Source§

type Error = Infallible

The type returned in the event of a conversion error.
Source§

fn try_from(value: U) -> Result<T, <T as TryFrom<U>>::Error>

Performs the conversion.
Source§

impl<T, U> TryInto<U> for T
where U: TryFrom<T>,

Source§

type Error = <U as TryFrom<T>>::Error

The type returned in the event of a conversion error.
Source§

fn try_into(self) -> Result<U, <U as TryFrom<T>>::Error>

Performs the conversion.
Source§

impl<V, T> VZip<V> for T
where V: MultiLane<T>,

Source§

fn vzip(self) -> V