【发布时间】:2018-07-08 23:43:18
【问题描述】:
我一直在使用 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 进程加载站点。
任何帮助将不胜感激。
谢谢
编辑 根据 cmets 的要求,这里有一些代码 sn-ps:
//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 包)
【问题讨论】:
-
您能分享一下您用来加载模型的代码吗?
-
@Jon 我已经添加了代码示例。
-
只是路径还是
modelFilePath中也有模型文件名?这与使用WriteAsync创建的模型相同,对吗?抱歉有这些问题。当我尝试它时它起作用了,所以试图看看你有什么不同导致它不起作用。 -
是的@Jon 我将完整的文件路径(包括文件名和扩展名)传递给这个方法。是的,这与使用 WriteAsync 方法创建的模型文件相同。
-
哦,
LoadModelAsync,因为你调用await,它应该有async关键字,当你调用ReadAsync时,它也应该有await关键字。也许这就是问题所在。
标签: c# asp.net-mvc ml.net