pub trait AutodiffBackend: Backend {
type InnerBackend: Backend<Device = Self::Device, FloatElem = Self::FloatElem, IntElem = Self::IntElem>;
type Gradients: Send;
// Required methods
fn backward(tensor: FloatTensor<Self>) -> Self::Gradients;
fn grad(
tensor: &FloatTensor<Self>,
grads: &Self::Gradients,
) -> Option<FloatTensor<Self::InnerBackend>>;
fn grad_remove(
tensor: &FloatTensor<Self>,
grads: &mut Self::Gradients,
) -> Option<FloatTensor<Self::InnerBackend>>;
fn grad_replace(
tensor: &FloatTensor<Self>,
grads: &mut Self::Gradients,
grad: FloatTensor<Self::InnerBackend>,
);
fn inner(tensor: FloatTensor<Self>) -> FloatTensor<Self::InnerBackend>;
fn int_inner(tensor: IntTensor<Self>) -> IntTensor<Self::InnerBackend>;
fn bool_inner(tensor: BoolTensor<Self>) -> BoolTensor<Self::InnerBackend>;
fn q_inner(
tensor: QuantizedTensor<Self>,
) -> QuantizedTensor<Self::InnerBackend>;
fn from_inner(tensor: FloatTensor<Self::InnerBackend>) -> FloatTensor<Self>;
fn int_from_inner(tensor: IntTensor<Self::InnerBackend>) -> IntTensor<Self>;
fn bool_from_inner(
tensor: BoolTensor<Self::InnerBackend>,
) -> BoolTensor<Self>;
fn q_from_inner(
tensor: QuantizedTensor<Self::InnerBackend>,
) -> QuantizedTensor<Self>;
}Expand description
Trait that allows a backend to support autodiff.
Required Associated Types§
Required Methods§
Sourcefn backward(tensor: FloatTensor<Self>) -> Self::Gradients
fn backward(tensor: FloatTensor<Self>) -> Self::Gradients
Sourcefn grad(
tensor: &FloatTensor<Self>,
grads: &Self::Gradients,
) -> Option<FloatTensor<Self::InnerBackend>>
fn grad( tensor: &FloatTensor<Self>, grads: &Self::Gradients, ) -> Option<FloatTensor<Self::InnerBackend>>
Sourcefn grad_remove(
tensor: &FloatTensor<Self>,
grads: &mut Self::Gradients,
) -> Option<FloatTensor<Self::InnerBackend>>
fn grad_remove( tensor: &FloatTensor<Self>, grads: &mut Self::Gradients, ) -> Option<FloatTensor<Self::InnerBackend>>
Sourcefn grad_replace(
tensor: &FloatTensor<Self>,
grads: &mut Self::Gradients,
grad: FloatTensor<Self::InnerBackend>,
)
fn grad_replace( tensor: &FloatTensor<Self>, grads: &mut Self::Gradients, grad: FloatTensor<Self::InnerBackend>, )
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: FloatTensor<Self>) -> FloatTensor<Self::InnerBackend>
fn inner(tensor: FloatTensor<Self>) -> FloatTensor<Self::InnerBackend>
Sourcefn int_inner(tensor: IntTensor<Self>) -> IntTensor<Self::InnerBackend>
fn int_inner(tensor: IntTensor<Self>) -> IntTensor<Self::InnerBackend>
Sourcefn bool_inner(tensor: BoolTensor<Self>) -> BoolTensor<Self::InnerBackend>
fn bool_inner(tensor: BoolTensor<Self>) -> BoolTensor<Self::InnerBackend>
Sourcefn q_inner(tensor: QuantizedTensor<Self>) -> QuantizedTensor<Self::InnerBackend>
fn q_inner(tensor: QuantizedTensor<Self>) -> QuantizedTensor<Self::InnerBackend>
Sourcefn from_inner(tensor: FloatTensor<Self::InnerBackend>) -> FloatTensor<Self>
fn from_inner(tensor: FloatTensor<Self::InnerBackend>) -> FloatTensor<Self>
Sourcefn int_from_inner(tensor: IntTensor<Self::InnerBackend>) -> IntTensor<Self>
fn int_from_inner(tensor: IntTensor<Self::InnerBackend>) -> IntTensor<Self>
Sourcefn bool_from_inner(tensor: BoolTensor<Self::InnerBackend>) -> BoolTensor<Self>
fn bool_from_inner(tensor: BoolTensor<Self::InnerBackend>) -> BoolTensor<Self>
Sourcefn q_from_inner(
tensor: QuantizedTensor<Self::InnerBackend>,
) -> QuantizedTensor<Self>
fn q_from_inner( tensor: QuantizedTensor<Self::InnerBackend>, ) -> QuantizedTensor<Self>
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.