onnx-helpers 2.2.1

ONNX model construction helpers.
Documentation
use onnx_helpers::prelude::*;
use onnx_pb::{save_model, tensor_proto::DataType};

fn main() {
    let mut graph = builder::Graph::new("stddev");
    let x = graph.input("X").typed(DataType::Float).dim(1).dim(6).node();
    let std = stddev(&mut graph, &x);
    let mrev = mean_reverse(&mut graph, &x);
    let graph = graph
        .outputs_typed(std.with_name("stddev"), DataType::Float)
        .outputs_typed(mrev.with_name("mean_reverse"), DataType::Float);
    let model = graph.model().build();
    save_model("ensemble.onnx", &model).unwrap();
}

fn stddev(graph: &mut builder::Graph, x: &Node) -> Node {
    let two = graph.constant("two", 2.0f32);
    (x - x.mean(1, true)).abs().pow(two).mean(1, true).sqrt()
}

fn mean_reverse(graph: &mut builder::Graph, x: &Node) -> Node {
    let two = graph.constant("two", 2.0f32);
    -(x - x.mean(1, true)) * two + x
}