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

C# ML.Net无法从MVC项目中的存储中加载模型,c#,asp.net-mvc,ml.net,C#,Asp.net Mvc,Ml.net,我一直在使用ML.Net,并希望将其集成到ASP.NETMVC项目中 我有一个控制台应用程序,负责训练模型,然后将其保存到服务器上的一个文件夹中,然后MVC项目将加载它并使用它预测结果 在我的初始测试中,console应用程序能够训练模型并将其保存到文件中,然后从该文件加载模型并预测一些结果 但是,MVC项目无法加载相同的模型文件,出现以下异常: "Message": "An error has occurred.", "ExceptionMessage": "Couldn't load mod

我一直在使用ML.Net,并希望将其集成到ASP.NETMVC项目中

我有一个控制台应用程序,负责训练模型,然后将其保存到服务器上的一个文件夹中,然后MVC项目将加载它并使用它预测结果

在我的初始测试中,console应用程序能够训练模型并将其保存到文件中,然后从该文件加载模型并预测一些结果

但是,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项目中失败

console应用程序和mvc项目都运行在.Net Framework 4.6.1(ML.Net要求的Net标准2.0)上。当MVC项目设置为AnyCPU时,控制台应用程序的目标是x64,但本地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();
//加载模型
公共任务LoadModelAsync()
{
return PredictionModel.ReadAsync(modelFilePath);//此行抛出上述异常
}
//上面的方法是这样调用的
var predictionModel=await loadmodelsync();
编辑
ML.Net版本0.3.0(来自Nuget软件包)

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

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


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

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

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


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

您可以共享用于加载模型的代码吗?@Jon我添加了代码示例。这只是路径还是模型文件名
modelFilePath
也是吗?这与使用
WriteAsync
创建的模型相同,对吗?很抱歉问了这么多问题。当我尝试它的时候,它工作了,所以试图看看你有什么不同导致它不工作。是的@Jon我正在将完整的文件路径(包括文件名和扩展名)传递给这个方法。是的,这是用WriteAsync方法创建的同一个模型文件。哦,
LoadModelAsync
,因为你在上面调用
await
,它应该有
async
关键字,当你调用
ReadAsync
时,它也应该有
await
关键字。也许这就是问题所在。你能分享你用来加载模型的代码吗?@Jon我已经添加了代码示例。它只是路径,还是你在
modelFilePath
中也有模型文件名?这与使用
WriteAsync
创建的模型相同,对吗?很抱歉问了这么多问题。当我尝试它的时候,它工作了,所以试图看看你有什么不同导致它不工作。是的@Jon我正在将完整的文件路径(包括文件名和扩展名)传递给这个方法。是的,这是用WriteAsync方法创建的同一个模型文件。哦,
LoadModelAsync
,因为你在上面调用
await
,它应该有
async
关键字,当你调用
ReadAsync
时,它也应该有
await
关键字。也许这就是问题所在。