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

ML.Net fails to load a model from storage in MVC project

我一直在玩 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 包)

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

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

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