4 releases (breaking)

0.3.0 Jan 21, 2025
0.2.0 Nov 22, 2024
0.1.0 Nov 19, 2024
0.0.0 Nov 19, 2024

#674 in WebAssembly

Download history 224/week @ 2024-11-15 198/week @ 2024-11-22 12/week @ 2024-11-29 12/week @ 2024-12-06 1/week @ 2024-12-13 87/week @ 2025-01-17 17/week @ 2025-01-24 16/week @ 2025-01-31 140/week @ 2025-02-07

260 downloads per month
Used in floretta-cli

MIT license

61KB
1.5K SLoC

Reverse-mode automatic differentiation for WebAssembly.

The typical workflow is to create an empty config via Autodiff::new, use Autodiff::export to specify one or more functions to export the backward pass, and then use Autodiff::transform to process a Wasm module.

For example, if you have wat and Wasmtime installed:

use wasmtime::{Engine, Instance, Module, Store};

let input = wat::parse_str(r#"
(module
  (func (export "square") (param f64) (result f64)
    (f64.mul (local.get 0) (local.get 0))))
"#).unwrap();

let mut ad = floretta::Autodiff::new();
ad.export("square", "backprop");
let output = ad.transform(&input).unwrap();

let engine = Engine::default();
let mut store = Store::new(&engine, ());
let module = Module::new(&engine, &output).unwrap();
let instance = Instance::new(&mut store, &module, &[]).unwrap();
let square = instance.get_typed_func::<f64, f64>(&mut store, "square").unwrap();
let backprop = instance.get_typed_func::<f64, f64>(&mut store, "backprop").unwrap();

assert_eq!(square.call(&mut store, 3.).unwrap(), 9.);
assert_eq!(backprop.call(&mut store, 1.).unwrap(), 6.);

Dependencies

~3.5MB
~76K SLoC

pFad - Phonifier reborn

Pfad - The Proxy pFad of © 2024 Garber Painting. All rights reserved.

Note: This service is not intended for secure transactions such as banking, social media, email, or purchasing. Use at your own risk. We assume no liability whatsoever for broken pages.


Alternative Proxies:

Alternative Proxy

pFad Proxy

pFad v3 Proxy

pFad v4 Proxy