【问题标题】:ML.Net - Cannot load a saved ModelML.Net - 无法加载保存的模型
【发布时间】:2019-03-01 14:08:16
【问题描述】:

我想在我的应用中使用 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
}

【问题讨论】:

  • 您可以在 ml.net github repo 中打开一个问题,并附加您的模型,如果您对此没有任何问题。由于它抱怨缺少文件,DataLoaderModel\Model.key 如果您查看模型内部,该文件是否存在?

标签: c# machine-learning ml.net


【解决方案1】:

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

Microsoft.ML.HalLearners
Microsoft.ML.LightGBM 

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

这个异常“不清楚”的问题可能会在 ML.NET 0.11 中得到修复。

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

希望对您有所帮助! :)

【讨论】:

  • 您好,很抱歉再次提出这个问题。从 .net 4.6 Web 应用程序使用我的自定义 .net 标准库时,我遇到了同样的问题(它在客户端 .netcore 应用程序上运行良好)。我已经添加了您在答案中建议的 2 个软件包,但仍然不满意。我还引用了我在模型训练应用程序中明确引用的所有包。还有什么我可以检查以了解仍然缺少哪些参考吗?谢谢!
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2016-05-29
  • 1970-01-01
相关资源
最近更新 更多