docs.rs failed to build menoh-0.2.1
Please check the build logs for more information.
See Builds for ideas on how to fix a failed build, or Metadata for how to configure docs.rs builds.
If you believe this is docs.rs' fault, open an issue.
Please check the build logs for more information.
See Builds for ideas on how to fix a failed build, or Metadata for how to configure docs.rs builds.
If you believe this is docs.rs' fault, open an issue.
Visit the last successful build:
menoh-0.2.2
Rust binding for Menoh
Example
fn main() -> Result<(), menoh::Error> {
let mut model = menoh::Builder::from_onnx("MLP.onnx")?
.add_input::<f32>("input", &[2, 3])?
.add_output("fc2")?
.build("mkldnn", "")?;
let (in_dims, in_buf) = model.get_variable_mut::<f32>("input")?;
in_buf.copy_from_slice(&[0., 1., 2., 3., 4., 5.]);
println!("in:");
# assert_eq!(in_dims, &[2, 3]);
println!(" dims: {:?}", in_dims);
println!(" buf: {:?}", in_buf);
model.run()?;
let (out_dims, out_buf) = model.get_variable::<f32>("fc2")?;
println!("out:");
# assert_eq!(out_dims, &[2, 5]);
println!(" dims: {:?}", out_dims);
println!(" buf: {:?}", out_buf);
# let expected = &[0., 0., 15., 96., 177., 0., 0., 51., 312., 573.];
# for i in 0..expected.len() {
# assert!((out_buf[i] - expected[i]).abs() < 1e-6);
# }
Ok(())
}
Usage
1. Build a Model
.
# fn main() -> Result<(), menoh::Error> {
let mut model = menoh::Builder::from_onnx("MLP.onnx")?
// register `"input"` as input
// and specify its type (`f32`) and shape (`&[2, 3]`).
.add_input::<f32>("input", &[2, 3])?
// register `"fc2"` as output.
.add_output("fc2")?
// specify backend (`"mkldnn"`) and its configuration (`""`).
.build("mkldnn", "")?;
# Ok(())
# }
Instead of Builder
, we can use a combination of some low-level APIs.
# fn main() -> Result<(), menoh::Error> {
let mut model_data = menoh::ModelData::from_onnx("MLP.onnx")?;
let mut vpt_builder = menoh::VariableProfileTableBuilder::new()?;
vpt_builder.add_input::<f32>("input", &[2, 3])?;
vpt_builder.add_output("fc2")?;
let vpt = vpt_builder.build(&model_data)?;
model_data.optimize(&vpt)?;
let model_builder = menoh::ModelBuilder::new(&vpt)?;
let mut model = model_builder.build(model_data, "mkldnn", "")?;
# Ok(())
# }
2. Set data to input variable(s).
# fn main() -> Result<(), menoh::Error> {
# let mut model = menoh::Builder::from_onnx("MLP.onnx")?
# .add_input::<f32>("input", &[2, 3])?
# .add_output("fc2")?
# .build("mkldnn", "")?;
// fetch a read/write view of a variable.
let (in_dims, in_buf) = model.get_variable_mut::<f32>("input")?;
// set data to the variable.
in_buf.copy_from_slice(&[0., 1., 2., 3., 4., 5.]);
# Ok(())
# }
3. Execute computation.
# fn main() -> Result<(), menoh::Error> {
# let mut model = menoh::Builder::from_onnx("MLP.onnx")?
# .add_input::<f32>("input", &[2, 3])?
# .add_output("fc2")?
# .build("mkldnn", "")?;
model.run()?;
# Ok(())
# }
4. Fetch the result(s).
# fn main() -> Result<(), menoh::Error> {
# let mut model = menoh::Builder::from_onnx("MLP.onnx")?
# .add_input::<f32>("input", &[2, 3])?
# .add_output("fc2")?
# .build("mkldnn", "")?;
// fetch a read-only view of a variable.
let (out_dims, out_buf) = model.get_variable::<f32>("fc2")?;
// use the data (e.g. print them).
println!("{:?}", out_buf);
# Ok(())
# }