0

我想在我的应用程序中使用 ML.Net 重新加载经过训练的模型,而不必重新训练它。

训练并保存它看起来不错。创建 zip 文件并填充它。

但是当我尝试从 FileStream 重新加载它时,我收到一条System.InvalidOperationException消息Repository doesn't contain entry DataLoaderModel\Model.key

我的代码与我在机器学习示例中找到的代码非常相似

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
}
4

1 回答 1

0

您可能缺少添加所需的 Nuget 包。确保将以下 NuGet 包添加到项目中:

Microsoft.ML.HalLearners
Microsoft.ML.LightGBM 

基本上,您遇到了这个问题,因为您尝试加载的模型包含一个自定义映射转换器,该转换器在其中一个 NuGet 包中实现并作为方法扩展在内部访问。当我们找不到该扩展/合同时,我们在上面的 ModelLoadContext.LoadModel 期间抛出一个异常,说“找不到扩展 'foo'”。但是该异常被“吃掉”(我们的错)存在一个问题,并且它显示了一个错误的异常。

可能会针对 ML.NET 0.11 修复此异常的“不清楚”问题。

但是,如果您添加那些 NuGet 包(或所需的 NuGet 包,与您的训练模型应用程序进行比较),它应该可以工作。

希望能帮助到你!:)

于 2019-03-01T06:08:16.603 回答