pub struct OptimizationState<A: Float + 'static, D: Dimension + 'static> { /* private fields */ }Expand description
Current optimization state: parameters plus everything needed to move them.
Implementations§
Source§impl<A, D> OptimizationState<A, D>
impl<A, D> OptimizationState<A, D>
Sourcepub fn new(
parameters: Array<A, D>,
kind: HardwareOptimizerKind,
base_learning_rate: A,
accumulation_steps: usize,
) -> Self
pub fn new( parameters: Array<A, D>, kind: HardwareOptimizerKind, base_learning_rate: A, accumulation_steps: usize, ) -> Self
Build a state around parameters, using the optimizer family kind.
accumulation_steps is clamped to at least 1: zero micro-batches per
update would mean the parameters never move.
Sourcepub fn step(&mut self, gradients: &Array<A, D>) -> Result<HardwareStepReport<A>>
pub fn step(&mut self, gradients: &Array<A, D>) -> Result<HardwareStepReport<A>>
Apply one gradient.
With accumulation_steps == 1 this performs an optimizer update
immediately. Otherwise the gradient is summed into the accumulator and
the update happens once the window is full, using the mean of the
window so the effective learning rate does not scale with the number of
micro-batches.
A gradient whose shape differs from the parameters is reported rather than silently zipped against a truncated view.
Sourcepub fn parameters(&self) -> &Array<A, D>
pub fn parameters(&self) -> &Array<A, D>
Current parameters.
Sourcepub fn step_count(&self) -> usize
pub fn step_count(&self) -> usize
Number of optimizer updates applied so far.
Sourcepub fn optimizer_kind(&self) -> HardwareOptimizerKind
pub fn optimizer_kind(&self) -> HardwareOptimizerKind
Optimizer family currently in use.
Sourcepub fn learning_rate(&self) -> A
pub fn learning_rate(&self) -> A
Learning rate the next update will use.
Sourcepub fn base_learning_rate(&self) -> A
pub fn base_learning_rate(&self) -> A
Rate this state was constructed with, for comparison against the live
OptimizationState::learning_rate.
Sourcepub fn accumulation_steps(&self) -> usize
pub fn accumulation_steps(&self) -> usize
Micro-batches per optimizer update.
Sourcepub fn accumulated_micro_steps(&self) -> usize
pub fn accumulated_micro_steps(&self) -> usize
Micro-batches currently held in the accumulator.
Sourcepub fn set_accumulation_steps(&mut self, accumulation_steps: usize)
pub fn set_accumulation_steps(&mut self, accumulation_steps: usize)
Change the accumulation window.
Any partially accumulated window is discarded: mixing gradients averaged over different window sizes would silently change the effective learning rate of the next update.
Sourcepub fn set_lr_scheduler(
&mut self,
schedule: Box<dyn LearningRateScheduler<A> + Send + Sync>,
)
pub fn set_lr_scheduler( &mut self, schedule: Box<dyn LearningRateScheduler<A> + Send + Sync>, )
Install a learning rate schedule.
The schedule owns the rate from this point on: every update reads
LearningRateScheduler::get_learning_rate and pushes it into the
optimizer, so a rate set directly on the optimizer would be overwritten.
base_learning_rate is deliberately left alone: it records what this
state was constructed with, which is the only thing a later comparison
against the live rate can be meaningful against.
Sourcepub fn rebuild_optimizer(&mut self, kind: HardwareOptimizerKind)
pub fn rebuild_optimizer(&mut self, kind: HardwareOptimizerKind)
Replace the optimizer with a freshly built one of family kind.
This discards the accumulated moment state, which is why
super::HardwareAwareOptimizer::optimize_for_hardware only does it
before the first update.
Sourcepub fn set_optimizer(
&mut self,
kind: HardwareOptimizerKind,
optimizer: Box<dyn Optimizer<A, D> + Send + Sync>,
)
pub fn set_optimizer( &mut self, kind: HardwareOptimizerKind, optimizer: Box<dyn Optimizer<A, D> + Send + Sync>, )
Install a caller-supplied optimizer, for the cases the built-in recommendation does not cover.
kind is what the state will report from
OptimizationState::optimizer_kind; pass the family optimizer
actually belongs to so the reported state stays truthful.
Trait Implementations§
Auto Trait Implementations§
impl<A, D> !RefUnwindSafe for OptimizationState<A, D>
impl<A, D> !UnwindSafe for OptimizationState<A, D>
impl<A, D> Freeze for OptimizationState<A, D>
impl<A, D> Send for OptimizationState<A, D>where
A: Send,
impl<A, D> Sync for OptimizationState<A, D>where
A: Sync,
impl<A, D> Unpin for OptimizationState<A, D>
impl<A, D> UnsafeUnpin for OptimizationState<A, D>where
A: UnsafeUnpin,
D: UnsafeUnpin,
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
impl<ST, DT> CastableFrom<ST, Initialized, Initialized> for DT
impl<ST, DT> CastableFrom<ST, Uninit, Uninit> for DT
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 moreSource§impl<T> Pointable for T
impl<T> Pointable for T
impl<T> Read<Exclusive, BecauseExclusive> for Twhere
T: ?Sized,
Source§impl<SS, SP> SupersetOf<SS> for SPwhere
SS: SubsetOf<SP>,
impl<SS, SP> SupersetOf<SS> for SPwhere
SS: SubsetOf<SP>,
Source§fn to_subset(&self) -> Option<SS>
fn to_subset(&self) -> Option<SS>
self from the equivalent element of its
superset. Read moreSource§fn is_in_subset(&self) -> bool
fn is_in_subset(&self) -> bool
self is actually part of its subset T (and can be converted to it).Source§fn to_subset_unchecked(&self) -> SS
fn to_subset_unchecked(&self) -> SS
self.to_subset but without any property checks. Always succeeds.Source§fn from_subset(element: &SS) -> SP
fn from_subset(element: &SS) -> SP
self to the equivalent element of its superset.