onnx-export-rs 0.1.1

Export canonical Rust machine-learning models to ONNX
Documentation
//! Fits a SmartCore linear model, exports it, and validates it with Tract.

use ndarray::{array, Array1};
use onnx_export_rs::{
    adapters::smartcore::linear_weights, exporters::export_linear, to_bytes,
    validate::validate_export, Result,
};
use smartcore::linalg::basic::matrix::DenseMatrix;
use smartcore::linear::linear_regression::{LinearRegression, LinearRegressionParameters};

fn main() -> Result<()> {
    let matrix = DenseMatrix::from_2d_array(&[&[0.0, 0.0], &[1.0, 0.0], &[0.0, 1.0], &[1.0, 1.0]])
        .expect("rectangular training data");
    let targets = vec![0.5, 2.5, -0.5, 1.5];
    let fitted = LinearRegression::fit(&matrix, &targets, LinearRegressionParameters::default())
        .expect("linear fit");
    let weights = linear_weights(&fitted);
    let model = export_linear(&weights);
    let inputs = array![[0.0, 0.0], [1.0, 1.0]];
    let expected = Array1::from_vec(vec![0.5, 1.5]);
    let report = validate_export(&to_bytes(&model)?, &inputs, move |_| expected.clone(), 1e-5)?;
    assert!(report.passed, "{report:?}");
    onnx_export_rs::save_to_file(&model, "smartcore-linear.onnx")
}