ML.NET экспорт в ONNX

#onnx #ml.net-model-builder

#onnx #ml.net-конструктор моделей

Вопрос:

Инструменты NET GUI для обучения модели. Модель отлично работает с приложением на C #, но я хочу иметь ее в формате ONNX. Я нашел инструменты, которые конвертируют между форматами моделей, но не смог найти ничего для ML.NET сгенерированный формат. По-видимому, это какой-то zip-файл, и больше я ничего об этом не знаю. кто-нибудь знает инструмент для преобразования в ONNX. Спасибо

Microsoft ML.Net Конструктор моделей генерирует код

 
    // Load Data
                IDataView trainingDataView = mlContext.Data.LoadFromTextFile<ModelInput>(
                                                path: TRAIN_DATA_FILEPATH,
                                                hasHeader: true,
                                                separatorChar: ',',
                                                allowQuoting: true,
                                                allowSparse: false);
    
                // Build training pipeline
                IEstimator<ITransformer> trainingPipeline = BuildTrainingPipeline(mlContext);
    
                // Train Model
                ITransformer mlModel = TrainModel(mlContext, trainingDataView, trainingPipeline);
    
                // Evaluate quality of Model
                Evaluate(mlContext, trainingDataView, trainingPipeline);
    
                // Save model
                SaveModel       (mlContext, mlModel, MODEL_FILE, trainingDataView.Schema);
    
    
                var path = GetAbsolutePath(MODEL_FILE);
                path = new FileInfo(path).Directory.FullName;
                path = Path.Combine(path, "mymodel.onnx");
    
                using (var onnx = File.Open(path, FileMode.OpenOrCreate))
                {
                    mlContext.Model.ConvertToOnnx(mlModel, trainingDataView, onnx);
                }

 

От

 var path = GetAbsolutePath(MODEL_FILE);
                path = new FileInfo(path).Directory.FullName;
                path = Path.Combine(path, "mymodel.onnx");
    
                using (var onnx = File.Open(path, FileMode.OpenOrCreate))
                {
                    mlContext.Model.ConvertToOnnx(mlModel, trainingDataView, onnx);
                }

 

Я внес изменения.
Я получаю файл onnx, но я не могу его запустить (вывод). Аналогично, я пытался открыть его с помощью WinML Dashboard, но он также не может запускать сгенерированный onnx. Интересно, может быть, это версия onnx, которую он генерирует?
модель представляет собой простую регрессию со всеми входными числами с плавающей запятой и выводом одного числа с плавающей запятой.

Комментарии:

1. У вас есть решение вашей проблемы? У меня такая же проблема. Я хочу обучить модель с помощью конструктора моделей, а затем преобразовать ее в onnx, но пока безуспешно. Пакет Onnx converter не работает и выдает ошибку.

Ответ №1:

Используйте пакет NuGet Microsoft.ML.OnnxConverter. Что-то вроде этого:

 var mlContext = new MLContext();

...

IDataView trainingData = mlContext.Data.LoadFromEnumerable(inputData);

var pipeline = mlContext.Transforms.Concatenate("Features", ... )
    .Append(...));

var model = pipeline.Fit(trainingData);

using (var onnx = File.Open("mymodel.onnx", FileMode.OpenOrCreate))
{
    mlContext.Model.ConvertToOnnx(model, trainingData, onnx);
}