我想在我的应用中使用ML.Net重新加载经过训练的模型,而不必重新进行训练。
培训并保存起来看起来不错。创建zip文件并填充。
但是当我尝试从FileStream重新加载它时,我收到了System.InvalidOperationException
并显示消息Repository doesn't contain entry DataLoaderModel\Model.key
我的代码与在Machine Learning Examples上找到的代码非常相似
var p = @"C:\Users\{UserName}\Desktop\model.zip";
if (this._mlContext == null)
this._mlContext = new MLContext();
ITransformer model;
try
{
using (var stream = File.OpenRead(p))
model = this._mlContext.Model.Load(stream);
}
catch (Exception)
{
throw; // Invalid Operation Exception
}
答案 0 :(得分:0)
您可能缺少添加所需的Nuget程序包。 确保将以下NuGet软件包添加到项目中:
Microsoft.ML.HalLearners
Microsoft.ML.LightGBM
基本上,您遇到了这个问题,因为要加载的模型包含一个自定义映射转换器,该转换器在这些NuGet包之一中实现,并在内部作为方法扩展进行访问。当我们找不到该扩展名/合同时,我们在ModelLoadContext.LoadModel期间抛出一个异常,说“找不到扩展名'foo'”。但是有一个问题是该异常被“吃掉了”(我们的错),并且显示了一个错误的异常。
对于ML.NET 0.11,此异常的“不清楚”问题可能会得到解决。
但是,如果您添加了这些NuGet程序包(或所需的NuGet程序包,请与您的训练模型应用程序进行比较),它应该可以工作。
希望有帮助! :)