【问题标题】:Load model with ML.NET saved with keras使用 keras 保存的 ML.NET 加载模型
【发布时间】:2019-04-30 14:38:23
【问题描述】:

我有一个用 Keras 用 Python 实现的神经网络。训练完成后,我导出了模型,并且有两个文件:model.js 和 model.h5。现在我想在 .NET 项目中进行实时分类,我想使用经过训练的神经网络。

在 ML.NET 中有没有办法将使用 python 导出的模型和训练的权重加载到模型对象中?

我在文档[1] 中看到可以加载以前保存的模型,但显然是存储在 .zip 中,我找不到格式(也许制作一个从 python 获取模型的脚本和'将其翻译成 ML.NET 模型。

显然 hdf5 格式是一个标准[2],有没有办法用 ML.NET 加载它?

[1]https://docs.microsoft.com/en-us/dotnet/machine-learning/how-to-guides/consuming-model-ml-net

[2]https://support.hdfgroup.org/HDF5/doc1.6/UG/10_Datasets.html

【问题讨论】:

  • 我认为您必须将其转换为 ONNX 模型并以这种方式阅读。

标签: python .net machine-learning keras ml.net


【解决方案1】:

ML.net 支持 ONNX 模型,如example.

您可以通过WinMLTools将您的 keras 模型转换为 ONNX 模型

【讨论】:

    【解决方案2】:

    我曾经历过相同的路径,我强烈建议先使用 Python 的 Keras2onnx 库包将您的 Keras 模块转换为“onnx”格式。我使用的简单代码如下:

    reconstructed_model = keras.models.load_model("<your location>\\my_model")
    
    import onnx
    import keras2onnx
    
    model_name_onnx = "model.onnx"
    
    onnx_model = keras2onnx.convert_keras(reconstructed_model, reconstructed_model.name)
    
    onnx.save_model(onnx_model, model_name_onnx)
    

    在 C# 方面,关于如何处理数据(即图像)并进行预测,请遵循 Microsoft 示例 (https://docs.microsoft.com/en-us/dotnet/machine-learning/tutorials/object-detection-onnx)

    您可以将 ML.NET 与 dotNet Core 或 Net framework > 4.7 一起使用。 以下是关于如何读取图像文件并运行 model.onnx 进行预测的摘录。

    ///First, load the data into an IDataView.
       IEnumerable<ImageNetData> images = ImageNetData.ReadFromFile(imagesFolder);
       IDataView imageDataView = mlContext.Data.LoadFromEnumerable(images);
    
       var modelScorer = new OnnxModelScorer(imagesFolder, modelFilePath, mlContext);
    
    // Use model to score data
       IEnumerable<float[]> probabilities = modelScorer.Score(imageDataView);
    

    ImageNetData 类基本上通过过滤图像文件(从目录)读取 imageFolder 中的图像,并使用两个属性识别它们, 标签是文件名,ImagePath 是图像文件的路径。 OnnxModelScorer 类运行加载模型和预测方法。

    这就是您从 C# 生成的 python Keras 模型预测所需的全部内容。

    【讨论】:

      【解决方案3】:

      正如 Cihan Yakar 和 Jon 提到的,解决方案是将模型转换为 ONNX。我找到了一个很好的教程来解释如何做到这一点:

      https://fizzylogic.nl/2018/02/16/heres-why-microsoft-cognitive-toolkit-is-the-coolest-deep-learning-framework-around/

      【讨论】:

      • 发现这个例子有点混乱,不是最新的,没有运行源代码。
      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2019-04-12
      • 2020-08-07
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2021-03-08
      • 2021-12-25
      相关资源
      最近更新 更多