pub struct AxisSlicesExpand { /* private fields */ }Implementations§
Source§impl AxisSlicesExpand
impl AxisSlicesExpand
Sourcepub fn __expand_mul_method<E: Float>(
&mut self,
scope: &Scope,
factors: &<Array<E> as CubeType>::ExpandType,
)
pub fn __expand_mul_method<E: Float>( &mut self, scope: &Scope, factors: &<Array<E> as CubeType>::ExpandType, )
self[i, s] *= factors[i]. A plane’s fragments bounce through its scratch, met on
sync_plane: every unit of the plane calls it.
Sourcepub fn __expand_probabilities_method<E: Float>(
&mut self,
scope: &Scope,
scale: <E as CubeType>::ExpandType,
bias: &<Tile as CubeType>::ExpandType,
logsumexp: &<Tile as CubeType>::ExpandType,
)
pub fn __expand_probabilities_method<E: Float>( &mut self, scope: &Scope, scale: <E as CubeType>::ExpandType, bias: &<Tile as CubeType>::ExpandType, logsumexp: &<Tile as CubeType>::ExpandType, )
self[c] = exp(self[c] · scale + bias[c] − logsumexp[c]): the probabilities of a softmax
whose logsumexp is known, read back from it instead of walking the score again.
logsumexp is a window of memory that omits the axis the softmax ran along, which it
broadcasts over: along the slices where that axis is the innermost, along each slice where
it is not, as a walk owned by the keys holds its scores keys first. Its other axes are this
tile’s, or one wide. A cell whose logsumexp is the minimum value, every key of its softmax
masked, is left at zero.
Sourcepub fn __expand_softmax_gradient_method<E: Float>(
&mut self,
scope: &Scope,
probabilities: &<AxisSlices as CubeType>::ExpandType,
delta: &<Tile as CubeType>::ExpandType,
)
pub fn __expand_softmax_gradient_method<E: Float>( &mut self, scope: &Scope, probabilities: &<AxisSlices as CubeType>::ExpandType, delta: &<Tile as CubeType>::ExpandType, )
self[c] = probabilities[c] · (self[c] − delta[c]): a softmax’s gradient against its
scores, where self holds the gradient against its probabilities and delta is, for each
softmax, Σ probabilities · self along the axis it ran along. delta broadcasts as
probabilities’s logsumexp does; the probabilities are cut as
self is, held by the same holder.
Sourcepub fn __expand_mul<E: Float>(
scope: &Scope,
this: &mut Self,
factors: &<Array<E> as CubeType>::ExpandType,
)
pub fn __expand_mul<E: Float>( scope: &Scope, this: &mut Self, factors: &<Array<E> as CubeType>::ExpandType, )
self[i, s] *= factors[i]. A plane’s fragments bounce through its scratch, met on
sync_plane: every unit of the plane calls it.
Sourcepub fn __expand_probabilities<E: Float>(
scope: &Scope,
this: &mut Self,
scale: <E as CubeType>::ExpandType,
bias: &<Tile as CubeType>::ExpandType,
logsumexp: &<Tile as CubeType>::ExpandType,
)
pub fn __expand_probabilities<E: Float>( scope: &Scope, this: &mut Self, scale: <E as CubeType>::ExpandType, bias: &<Tile as CubeType>::ExpandType, logsumexp: &<Tile as CubeType>::ExpandType, )
self[c] = exp(self[c] · scale + bias[c] − logsumexp[c]): the probabilities of a softmax
whose logsumexp is known, read back from it instead of walking the score again.
logsumexp is a window of memory that omits the axis the softmax ran along, which it
broadcasts over: along the slices where that axis is the innermost, along each slice where
it is not, as a walk owned by the keys holds its scores keys first. Its other axes are this
tile’s, or one wide. A cell whose logsumexp is the minimum value, every key of its softmax
masked, is left at zero.
Sourcepub fn __expand_softmax_gradient<E: Float>(
scope: &Scope,
this: &mut Self,
probabilities: &<AxisSlices as CubeType>::ExpandType,
delta: &<Tile as CubeType>::ExpandType,
)
pub fn __expand_softmax_gradient<E: Float>( scope: &Scope, this: &mut Self, probabilities: &<AxisSlices as CubeType>::ExpandType, delta: &<Tile as CubeType>::ExpandType, )
self[c] = probabilities[c] · (self[c] − delta[c]): a softmax’s gradient against its
scores, where self holds the gradient against its probabilities and delta is, for each
softmax, Σ probabilities · self along the axis it ran along. delta broadcasts as
probabilities’s logsumexp does; the probabilities are cut as
self is, held by the same holder.
Trait Implementations§
Source§impl AsMutExpand for AxisSlicesExpand
impl AsMutExpand for AxisSlicesExpand
fn __expand_ref_mut_method(&mut self, _: &Scope) -> &mut Self
fn __expand_as_mut_method(&mut self, scope: &Scope) -> &mut T
Source§impl AsRefExpand for AxisSlicesExpand
impl AsRefExpand for AxisSlicesExpand
fn __expand_ref_method(&self, _: &Scope) -> &Self
fn __expand_as_ref_method(&self, scope: &Scope) -> &T
Source§impl CubeDebug for AxisSlicesExpand
impl CubeDebug for AxisSlicesExpand
Source§fn set_debug_name(&self, scope: &Scope, name: &'static str)
fn set_debug_name(&self, scope: &Scope, name: &'static str)
Source§impl DerefExpand for AxisSlicesExpandwhere
for<'__cube_deref> <AxisSlicesKind as CubeType>::ExpandType: DerefExpand<Target = <AxisSlicesKind as CubeType>::ExpandType>,
impl DerefExpand for AxisSlicesExpandwhere
for<'__cube_deref> <AxisSlicesKind as CubeType>::ExpandType: DerefExpand<Target = <AxisSlicesKind as CubeType>::ExpandType>,
type Target = AxisSlicesExpand
fn __expand_deref_method(&self, scope: &Scope) -> Self
Source§impl ExpandTypeClone for AxisSlicesExpand
impl ExpandTypeClone for AxisSlicesExpand
Source§fn clone_unchecked(&self) -> Self
fn clone_unchecked(&self) -> Self
Clone semantics and should only be used for the
conceptual expand values, never real data. Using two values in the same branch is undefined
behaviour.Source§impl IntoExpand for AxisSlicesExpand
impl IntoExpand for AxisSlicesExpand
type Expand = AxisSlicesExpand
fn into_expand(self, _: &Scope) -> Self
Auto Trait Implementations§
impl !RefUnwindSafe for AxisSlicesExpand
impl !Send for AxisSlicesExpand
impl !Sync for AxisSlicesExpand
impl !UnwindSafe for AxisSlicesExpand
impl Freeze for AxisSlicesExpand
impl Unpin for AxisSlicesExpand
impl UnsafeUnpin for AxisSlicesExpand
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> Downcast for Twhere
T: Any,
impl<T> Downcast for Twhere
T: Any,
Source§fn into_any(self: Box<T>) -> Box<dyn Any>
fn into_any(self: Box<T>) -> Box<dyn Any>
Box<dyn Trait> (where Trait: Downcast) to Box<dyn Any>, which can then be
downcast into Box<dyn ConcreteType> where ConcreteType implements Trait.Source§fn into_any_rc(self: Rc<T>) -> Rc<dyn Any>
fn into_any_rc(self: Rc<T>) -> Rc<dyn Any>
Rc<Trait> (where Trait: Downcast) to Rc<Any>, which can then be further
downcast into Rc<ConcreteType> where ConcreteType implements Trait.Source§fn as_any(&self) -> &(dyn Any + 'static)
fn as_any(&self) -> &(dyn Any + 'static)
&Trait (where Trait: Downcast) to &Any. This is needed since Rust cannot
generate &Any’s vtable from &Trait’s.Source§fn as_any_mut(&mut self) -> &mut (dyn Any + 'static)
fn as_any_mut(&mut self) -> &mut (dyn Any + 'static)
&mut Trait (where Trait: Downcast) to &Any. This is needed since Rust cannot
generate &mut Any’s vtable from &mut Trait’s.impl<T> ErasedDestructor for Twhere
T: 'static,
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