135 releases
0.21.7 | Sep 23, 2024 |
---|---|
0.21.6 | Jul 24, 2024 |
0.21.5 | May 11, 2024 |
0.21.2 |
|
0.1.1 | Nov 2, 2018 |
#1175 in Machine learning
16,049 downloads per month
Used in 37 crates
(9 directly)
2MB
48K
SLoC
Tract
Tiny, no-nonsense, self contained, portable TensorFlow and ONNX inference.
Example
use tract_core::internal::*;
// build a simple model that just add 3 to each input component
let mut model = TypedModel::default();
let input_fact = f32::fact(&[3]);
let input = model.add_source("input", input_fact).unwrap();
let three = model.add_const("three".to_string(), tensor1(&[3f32])).unwrap();
let add = model.wire_node("add".to_string(),
tract_core::ops::math::add(),
[input, three].as_ref()
).unwrap();
model.auto_outputs().unwrap();
// We build an execution plan. Default inputs and outputs are inferred from
// the model graph.
let plan = SimplePlan::new(&model).unwrap();
// run the computation.
let input = tensor1(&[1.0f32, 2.5, 5.0]);
let mut outputs = plan.run(tvec![input.into()]).unwrap();
// take the first and only output tensor
let mut tensor = outputs.pop().unwrap();
assert_eq!(tensor, tensor1(&[4.0f32, 5.5, 8.0]).into());
While creating a model from Rust code is useful for testing the library, real-life use-cases will usually load a TensorFlow or ONNX model using tract-tensorflow or tract-onnx crates.
Dependencies
~13–25MB
~392K SLoC