在 ML.Net 1.4 中使用 ONNX 模型进行推理时出错

Error while using ONNX model for inferencing in ML.Net 1.4

我正在 ML.Net 创建我的第一个应用程序。 我想使用 sklearn 构建的模型来预测给定制造年份的汽车价格。

为此,我使用了如下所示的简单数据集。

> id    region  price   year    model   fuel    odometer    transmission
> 7316814884    auburn  33590   2014    sierra 1500 crew cab slt    gas 57923   other
> 7316814758    auburn  22590   2010    silverado 1500  gas 71229   other
> 7316814989    auburn  39590   2020    silverado 1500 crew gas 19160   other

我的 Python 训练和生成 ONNX 模型的代码

car_data = pd.read_csv('vehicles.csv', header=0, index_col=None)

Input_Cols = car_data[['year']]
Predict_Col = car_data['price']

X_train, X_test, y_train, y_test = train_test_split(Input_Cols, Predict_Col, test_size=0.2)

lrm = LinearRegression()
lrm.fit(X_train, y_train)

from skl2onnx import convert_sklearn
from skl2onnx.common.data_types import FloatTensorType
initial_type = [('year', FloatTensorType([1]))]
onx = convert_sklearn(lrm , initial_types=initial_type)
with open("CarPricePrediction.onnx", "wb") as f:
    f.write(onx.SerializeToString())

我在 .Net 中的输入和输出数据 类

public class InputData
{
    [ColumnName("year")]
    public float Year{ get; set; }
}
public class Output
{
    [ColumnName("sentence_embedding")]
    public List<float> SentenceEmbedding { get; set; }
}

主要推理代码

public static class Program
{
    static string ONNX_MODEL_PATH = @".\ONNX\CarPricePrediction.onnx";
    static MLContext mlContext = new MLContext();

    static void Main(string[] args)
    {
        var onnxPredictionPipeline = GetPredictionPipeline(mlContext);

        var onnxPredictionEngine = mlContext.Model.CreatePredictionEngine<InputData, Output>(onnxPredictionPipeline);

        var dt = new List<InputData>() { new InputData(){ Year = 2010 } };
        Output prediction = new Output();
        onnxPredictionEngine.Predict(dt, ref prediction);
        Console.WriteLine($"Predicted Fare: {prediction.SentenceEmbedding.First()}");
    }

    static ITransformer GetPredictionPipeline(MLContext mlContext)
    {
        var inputColumns = new string[] { "year" };
        var outputColumns = new string[] { "variable" };
        var onnxPredictionPipeline = mlContext.Transforms
                                        .ApplyOnnxModel(
                                            outputColumnNames: outputColumns,
                                            inputColumnNames: inputColumns,
                                            ONNX_MODEL_PATH);
        var emptyDv = mlContext.Data.LoadFromEnumerable(new InputData[] { });

        return onnxPredictionPipeline.Fit(emptyDv);
    }
}

我在

上遇到异常
mlContext.Model.CreatePredictionEngine<InputData, Output>(onnxPredictionPipeline)

Exception

我找出了代码中的问题。对我的代码进行更改后使其工作。

Python 代码更改 变化

initial_type = [('year', FloatTensorType([1]))]

initial_type = [('year', FloatTensorType([1,1]))]

C# 更改

改变这个

public class Output
{
    [ColumnName("sentence_embedding")]
    public List<float> SentenceEmbedding { get; set; }
}

public class Output
{
        [ColumnName("variable")]
        public float []Value { get; set; }
}

我的代码开始端到端运行。