【发布时间】:2018-12-14 14:08:28
【问题描述】:
我不知道如何在 Unity 中使用 ML.NET。
我做了什么: 将我的项目转换为与框架 4.x 兼容。 将 api 兼容级别转换为框架 4.x。 制作 assets/plugins/ml 文件夹并放入带有相应 xml 的 Microsoft.ML api。 将所有 ml.dlls 平台设置标记为仅兼容 86_64(这是多余的)。
我现在可以: 调用ML apis,创建MlContext、TextLoader,进行模型的训练。训练模型后,我还可以评估训练后的模型,但是...
我不能: 当试图从模型中得到预测时,我得到一个错误: github comment on issue from 28.12.18(里面还有一个完整的项目,可以看代码) 相同的代码适用于 Visual Studio 解决方案。
public float TestSinglePrediction(List<double> signal, MLContext mlContext, string modelPath)
{
ITransformer loadedModel;
using (var stream = new FileStream(modelPath, FileMode.Open, FileAccess.Read, FileShare.Read))
{
loadedModel = mlContext.Model.Load(stream);
}
var predictionFunction = loadedModel.MakePredictionFunction<AbstractSignal, PredictedRfd>(mlContext);
var abstractSignal = new AbstractSignal()
{
Sig1 = (float)signal[0],
Sig2 = (float)signal[1],
Sig3 = (float)signal[2],
Sig4 = (float)signal[3],
Sig5 = (float)signal[4],
Sig6 = (float)signal[5],
Sig7 = (float)signal[6],
Sig8 = (float)signal[7],
Sig9 = (float)signal[8],
Sig10 = (float)signal[9],
Sig11 = (float)signal[10],
Sig12 = (float)signal[11],
Sig13 = (float)signal[12],
Sig14 = (float)signal[13],
Sig15 = (float)signal[14],
Sig16 = (float)signal[15],
Sig17 = (float)signal[16],
Sig18 = (float)signal[17],
Sig19 = (float)signal[18],
Sig20 = (float)signal[19],
RfdX = 0
};
var prediction = predictionFunction.Predict(abstractSignal);
return prediction.RfdX;
}
这是返回错误行的方法:
var predictionFunction = loadedModel.MakePredictionFunction<AbstractSignal, PredictedRfd>(mlContext);
【问题讨论】:
-
我在 github 上提交了一个问题,任何人都可以在其中下载 unity 示例项目和 VS api 项目。 link 。解压并启动unity项目,Unity编辑器一启动就报错,无需按play。
-
更新:我已经设法以一种现在可以导入 ML dll 和训练模型的方式设置统一性,但是在尝试进行预测时我遇到了这个错误:(类似的代码适用于 .net 框架4.7.2 解决方案)ArgumentException: 方法参数不兼容 System.Delegate.CreateDelegate (System.Type 类型, System.Object firstArgument, System.Reflection.MethodInfo 方法, System.Boolean throwOnBindFailure, ... FULL DESCRIPTION ON : github.com/dotnet/machinelearning/issues/1886
标签: c# unity3d compatibility ml.net