我一直在玩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项目都在.NETFramework4.6.1上运行(ML.NET要求的.NETStandard2.0)。当MVC项目设置为anyCPU但本地IIS服务器在x64进程中加载站点时,控制台应用程序以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包)