是否可以在CreatePredictionEngine <>中动态添加Tsrc和Tdest?

时间:2019-05-08 06:21:40

标签: c# reflection ml.net

我目前正在尝试在MlContext.Model.CreatePredictionEngine <>(ITransformer)中动态更改Tsrc和Tdest;在ML.net中。因此,除了在代码中没有一个用于数据结构的类(Tsrc)和一个用于预测的类(Tdesc)之外,我还可以以某种方式动态添加可能带有反射的类吗?

我尝试使用JsonConvert.deseralize()加载对象,并将该对象的类型设置为Tsrc和Tdest。

            ITransformer loadedModel = mlContext.Model.Load(modelPath, out var schema);
            List<DataViewSchema.Column?> columnData = new List<DataViewSchema.Column?>();
            foreach (string col in columns)
            {
                DataViewSchema.Column? sch = schema.GetColumnOrNull(col);
                columnData.Add(sch);
            }
            object obj_data = JsonConvert.DeserializeObject(str_data_one);
            object obj_prediction = JsonConvert.DeserializeObject(str_data_two);



            //var prediction = mlContext.Model.CreatePredictionEngine<IrisData, IrisPrediction>(loadedModel).Predict();
            var prediction = mlContext.Model.CreatePredictionEngine<>(loadedModel).predict();

编辑: Tsrc和Tdest是实际的类,而不是类或方法的实例。一个示例是在注释掉的代码中有IrisData和IrisPrediction,这是每个类的代码:

     public class IrisData
    {
        [LoadColumn(0)]
        public float SepalLength;

        [LoadColumn(1)]
        public float SepalWidth;

        [LoadColumn(2)]
        public float PetalLength;

        [LoadColumn(3)]
        public float PetalWidth;

        [LoadColumn(4)]
        public string Label;
    }

    public class IrisPrediction
    {
        [ColumnName("PredictedLabel")]
        public string PredictedLabels;
    }

我如何使用反射实时构建程序的上述类并将其添加到Tsrc和Tdest?

1 个答案:

答案 0 :(得分:0)

如果不需要采用强类型格式的结果,则可以使用Transform方法而不是Predict。