ML.Net无法从MVC项目中的存储中加载模型

时间:2018-07-08 23:43:19

标签: c# asp.net-mvc ml.net

我一直在研究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软件包)

1 个答案:

答案 0 :(得分:1)

所以我设法解决了这个问题。 我得到的异常内部有许多内部异常,而我主要关注最内部的异常。但是最外面的例外是抱怨无法通过反射创建某些对象的实例。

MVC项目正在引用另一个具有所有用于加载和预测代码的项目。

此问题的解决方法是在主MVC项目中也添加对Microsoft.ML nuget库的引用,该引用也修复了反射异常并允许按预期加载模型。