pub struct AxisSlices { /* private fields */ }Expand description
A tile cut into slices along axis, one for every index of its other axes, each read and
written whole where the tile’s holder keeps it: the verbs an op reducing or broadcasting along
one axis runs. The slices write through to the tile.
axis is the tile’s innermost, the one its cells are contiguous along; any other is refused
by name.
Implementations§
Source§impl AxisSlices
impl AxisSlices
Sourcepub fn mul<E: Float>(&mut self, factors: &Array<E>)
pub fn mul<E: Float>(&mut self, factors: &Array<E>)
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 probabilities<E: Float>(
&mut self,
scale: E,
bias: &Tile,
logsumexp: &Tile,
)
pub fn probabilities<E: Float>( &mut self, scale: E, bias: &Tile, logsumexp: &Tile, )
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 softmax_gradient<E: Float>(
&mut self,
probabilities: &AxisSlices,
delta: &Tile,
)
pub fn softmax_gradient<E: Float>( &mut self, probabilities: &AxisSlices, delta: &Tile, )
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 as CubeType>::ExpandType,
factors: &<Array<E> as CubeType>::ExpandType,
)
pub fn __expand_mul<E: Float>( scope: &Scope, this: &mut <Self as CubeType>::ExpandType, 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 as CubeType>::ExpandType,
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 as CubeType>::ExpandType, 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 as CubeType>::ExpandType,
probabilities: &<AxisSlices as CubeType>::ExpandType,
delta: &<Tile as CubeType>::ExpandType,
)
pub fn __expand_softmax_gradient<E: Float>( scope: &Scope, this: &mut <Self as CubeType>::ExpandType, 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 CubeType for AxisSlices
impl CubeType for AxisSlices
Auto Trait Implementations§
impl Freeze for AxisSlices
impl RefUnwindSafe for AxisSlices
impl Send for AxisSlices
impl Sync for AxisSlices
impl Unpin for AxisSlices
impl UnsafeUnpin for AxisSlices
impl UnwindSafe for AxisSlices
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.Source§impl<T> DowncastSend for T
impl<T> DowncastSend for T
Source§impl<T> DowncastSync for T
impl<T> DowncastSync for T
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