pub struct Var<T> { /* private fields */ }Expand description
A differentiable variable for reverse-mode automatic differentiation.
§Examples
Using reverse_diff for reusable functions:
use autodiff::{reverse_diff, Var};
// Define f(x) = (x+1)(x-1) = x² - 1
let f = |x: Var<f64>| (x.clone() + 1.0) * (x - 1.0);
let (val, deriv) = reverse_diff(f, 3.0);
assert_eq!(val, 8.0); // f(3) = 8
assert_eq!(deriv, 6.0); // f'(3) = 2x = 6use autodiff::{reverse_diff, Var};
// Define f(x) = x² + x
let f = |x: Var<f64>| x.clone() * x.clone() + x;
let (val, deriv) = reverse_diff(f, 3.0);
assert_eq!(val, 12.0); // f(3) = 12
assert_eq!(deriv, 7.0); // f'(3) = 2x + 1 = 7Implementations§
Source§impl<T: Float> Var<T>
impl<T: Float> Var<T>
Sourcepub fn backward(&self) -> Gradients<T>
pub fn backward(&self) -> Gradients<T>
Computes gradients by backpropagation from this variable.
Returns a Gradients object that can be queried for the
gradient with respect to any variable.
§Examples
use autodiff::Tape;
let tape = Tape::new();
let x = tape.var(3.0);
let y = x.clone() * x.clone(); // y = x²
let grads = y.backward();
assert_eq!(grads.get(&x), 6.0); // dy/dx = 2x = 6Trait Implementations§
Auto Trait Implementations§
impl<T> Freeze for Var<T>
impl<T> !RefUnwindSafe for Var<T>
impl<T> !Send for Var<T>
impl<T> !Sync for Var<T>
impl<T> Unpin for Var<T>
impl<T> !UnwindSafe for Var<T>
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
Mutably borrows from an owned value. Read more