我一直在玩 ML.Net,并希望将其集成到 ASP.NET MVC 项目中。
我有一个控制台应用程序,负责训练模型,然后将其保存到服务器上的文件夹中,然后 MVC 项目将加载它并使用它来预测结果。
在我的初始测试中,控制台应用程序能够训练模型并将其保存到文件中,然后从该文件加载模型并预测一些结果。
但是,MVC 项目无法加载相同的模型文件,但出现以下异常:
"Message": "An error has occurred.",
"ExceptionMessage": "Couldn't load model: 'DataLoaderModel\Transform_005\SchemaBindableMapper\InnerMapper\Predictor'",
"ExceptionType": "System.FormatException",
"StackTrace": " at Microsoft.ML.Runtime.Model.ModelLoadContext.LoadModel[TRes,TSig](IHostEnvironment env, TRes& result, RepositoryReader rep, Entry ent, String dir, Object[] extra)\r\n at Microsoft.ML.Runtime.Model.ModelLoadContext.LoadModelOrNull[TRes,TSig](IHostEnvironment env, TRes& result, RepositoryReader rep, String dir, Object[] extra)\r\n at Microsoft.ML.Runtime.Model.ModelLoadContext.LoadModel[TRes,TSig](IHostEnvironment env, TRes& result, String name, Object[] extra)\r\n at Microsoft.ML.Runtime.Data.SchemaBindablePredictorWrapperBase..ctor(IHostEnvironment env, ModelLoadContext ctx)\r\n at Microsoft.ML.Runtime.Data.SchemaBindablePredictorWrapper.Create(IHostEnvironment env, ModelLoadContext ctx)"
有人经历过吗?奇怪的是,相同的模型会在控制台应用程序中按预期加载,但在 MVC 项目中失败。
控制台应用程序和 mvc 项目都在 .Net Framework 4.6.1(ML.NET 要求的 .Net 标准 2.0)上运行。控制台应用程序面向 x64,而 MVC 项目设置为 AnyCPU,但本地 IIS 服务器在 x64 进程中加载站点。
任何帮助,将不胜感激。
谢谢
编辑 按照评论中的要求,这里有一些代码片段:
//Loading the model
public Task<PredictionModel<Data, PredictionResult>> LoadModelAsync()
{
return PredictionModel.ReadAsync<SlateData, ResourcePrediction>(modelFilePath); // this line throws the exception above
}
//The above method is called like this
var predictionModel = await LoadModelAsync();
编辑 ML.Net 0.3.0 版(来自 Nuget 包)