pub trait AutodiffBackend: Backend {
type InnerBackend: Backend<Device = Self::Device, FloatElem = Self::FloatElem, IntElem = Self::IntElem>;
type Gradients: Send;
// Required methods
fn backward(tensor: Self::FloatTensorPrimitive) -> Self::Gradients;
fn grad(
tensor: &Self::FloatTensorPrimitive,
grads: &Self::Gradients,
) -> Option<<Self::InnerBackend as BackendTypes>::FloatTensorPrimitive>;
fn grad_remove(
tensor: &Self::FloatTensorPrimitive,
grads: &mut Self::Gradients,
) -> Option<<Self::InnerBackend as BackendTypes>::FloatTensorPrimitive>;
fn grad_replace(
tensor: &Self::FloatTensorPrimitive,
grads: &mut Self::Gradients,
grad: <Self::InnerBackend as BackendTypes>::FloatTensorPrimitive,
);
fn inner(
tensor: Self::FloatTensorPrimitive,
) -> <Self::InnerBackend as BackendTypes>::FloatTensorPrimitive;
fn int_inner(
tensor: Self::IntTensorPrimitive,
) -> <Self::InnerBackend as BackendTypes>::IntTensorPrimitive;
fn bool_inner(
tensor: Self::BoolTensorPrimitive,
) -> <Self::InnerBackend as BackendTypes>::BoolTensorPrimitive;
fn q_inner(
tensor: Self::QuantizedTensorPrimitive,
) -> <Self::InnerBackend as BackendTypes>::QuantizedTensorPrimitive;
fn from_inner(
tensor: <Self::InnerBackend as BackendTypes>::FloatTensorPrimitive,
) -> Self::FloatTensorPrimitive;
fn int_from_inner(
tensor: <Self::InnerBackend as BackendTypes>::IntTensorPrimitive,
) -> Self::IntTensorPrimitive;
fn bool_from_inner(
tensor: <Self::InnerBackend as BackendTypes>::BoolTensorPrimitive,
) -> Self::BoolTensorPrimitive;
fn q_from_inner(
tensor: <Self::InnerBackend as BackendTypes>::QuantizedTensorPrimitive,
) -> Self::QuantizedTensorPrimitive;
}Expand description
Trait that allows a backend to support autodiff.
Required Associated Types§
Required Methods§
Sourcefn backward(tensor: Self::FloatTensorPrimitive) -> Self::Gradients
fn backward(tensor: Self::FloatTensorPrimitive) -> Self::Gradients
Sourcefn grad(
tensor: &Self::FloatTensorPrimitive,
grads: &Self::Gradients,
) -> Option<<Self::InnerBackend as BackendTypes>::FloatTensorPrimitive>
fn grad( tensor: &Self::FloatTensorPrimitive, grads: &Self::Gradients, ) -> Option<<Self::InnerBackend as BackendTypes>::FloatTensorPrimitive>
Sourcefn grad_remove(
tensor: &Self::FloatTensorPrimitive,
grads: &mut Self::Gradients,
) -> Option<<Self::InnerBackend as BackendTypes>::FloatTensorPrimitive>
fn grad_remove( tensor: &Self::FloatTensorPrimitive, grads: &mut Self::Gradients, ) -> Option<<Self::InnerBackend as BackendTypes>::FloatTensorPrimitive>
Sourcefn grad_replace(
tensor: &Self::FloatTensorPrimitive,
grads: &mut Self::Gradients,
grad: <Self::InnerBackend as BackendTypes>::FloatTensorPrimitive,
)
fn grad_replace( tensor: &Self::FloatTensorPrimitive, grads: &mut Self::Gradients, grad: <Self::InnerBackend as BackendTypes>::FloatTensorPrimitive, )
Replace the gradients of a tensor with the one provided.
If no gradient existed for the provided tensor, register it.
§Arguments
tensor- The tensor to pop the gradients from.grads- The gradients.grad- The updated grad tensor.
Sourcefn inner(
tensor: Self::FloatTensorPrimitive,
) -> <Self::InnerBackend as BackendTypes>::FloatTensorPrimitive
fn inner( tensor: Self::FloatTensorPrimitive, ) -> <Self::InnerBackend as BackendTypes>::FloatTensorPrimitive
Sourcefn int_inner(
tensor: Self::IntTensorPrimitive,
) -> <Self::InnerBackend as BackendTypes>::IntTensorPrimitive
fn int_inner( tensor: Self::IntTensorPrimitive, ) -> <Self::InnerBackend as BackendTypes>::IntTensorPrimitive
Sourcefn bool_inner(
tensor: Self::BoolTensorPrimitive,
) -> <Self::InnerBackend as BackendTypes>::BoolTensorPrimitive
fn bool_inner( tensor: Self::BoolTensorPrimitive, ) -> <Self::InnerBackend as BackendTypes>::BoolTensorPrimitive
Sourcefn q_inner(
tensor: Self::QuantizedTensorPrimitive,
) -> <Self::InnerBackend as BackendTypes>::QuantizedTensorPrimitive
fn q_inner( tensor: Self::QuantizedTensorPrimitive, ) -> <Self::InnerBackend as BackendTypes>::QuantizedTensorPrimitive
Sourcefn from_inner(
tensor: <Self::InnerBackend as BackendTypes>::FloatTensorPrimitive,
) -> Self::FloatTensorPrimitive
fn from_inner( tensor: <Self::InnerBackend as BackendTypes>::FloatTensorPrimitive, ) -> Self::FloatTensorPrimitive
Sourcefn int_from_inner(
tensor: <Self::InnerBackend as BackendTypes>::IntTensorPrimitive,
) -> Self::IntTensorPrimitive
fn int_from_inner( tensor: <Self::InnerBackend as BackendTypes>::IntTensorPrimitive, ) -> Self::IntTensorPrimitive
Sourcefn bool_from_inner(
tensor: <Self::InnerBackend as BackendTypes>::BoolTensorPrimitive,
) -> Self::BoolTensorPrimitive
fn bool_from_inner( tensor: <Self::InnerBackend as BackendTypes>::BoolTensorPrimitive, ) -> Self::BoolTensorPrimitive
Sourcefn q_from_inner(
tensor: <Self::InnerBackend as BackendTypes>::QuantizedTensorPrimitive,
) -> Self::QuantizedTensorPrimitive
fn q_from_inner( tensor: <Self::InnerBackend as BackendTypes>::QuantizedTensorPrimitive, ) -> Self::QuantizedTensorPrimitive
Dyn Compatibility§
This trait is not dyn compatible.
In older versions of Rust, dyn compatibility was called "object safety", so this trait is not object safe.
Implementations on Foreign Types§
Source§impl<B, C> AutodiffBackend for Autodiff<B, C>where
B: Backend,
C: CheckpointStrategy,
Available on non-crate feature distributed only.
impl<B, C> AutodiffBackend for Autodiff<B, C>where
B: Backend,
C: CheckpointStrategy,
Available on non-crate feature
distributed only.