使用 keras 保存的 ML.NET 加载模型
Load model with ML.NET saved with keras
我在 Python 中使用 Keras 实现了一个神经网络。训练完成后,我导出了模型,并且得到了两个文件:model.js 和 model.h5。现在我想在 .NET 项目中实时分类,我想为此使用经过训练的神经网络。
在 ML.NET 中有没有一种方法可以将使用 python 导出的模型和经过训练的权重加载到模型对象中?
我在文档[1]中看到可以加载以前保存的模型,但显然存储在 .zip 中,我找不到格式(可能是为了制作一个脚本,从 python 和 'translate' 到 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
ML.net 支持 ONNX 模型,如此 example.
您可以通过WinMLTools
将您的keras模型转换为ONNX模型
正如 Cihan Yakar 和 Jon 提到的那样,解决方案是将模型转换为 ONNX。我找到了一个很好的教程来解释如何操作:
我也经历过相同的过程,我强烈建议先使用 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 class 基本上通过过滤图像文件(从目录中)读取 imageFolder 中的图像并使用两个属性识别它们,
标签是文件名,ImagePath 是图像文件的路径。
OnnxModelScorer class 运行加载模型和预测方法。
这就是 python Keras 从 C# 生成模型预测所需的全部内容。
我在 Python 中使用 Keras 实现了一个神经网络。训练完成后,我导出了模型,并且得到了两个文件:model.js 和 model.h5。现在我想在 .NET 项目中实时分类,我想为此使用经过训练的神经网络。
在 ML.NET 中有没有一种方法可以将使用 python 导出的模型和经过训练的权重加载到模型对象中?
我在文档[1]中看到可以加载以前保存的模型,但显然存储在 .zip 中,我找不到格式(可能是为了制作一个脚本,从 python 和 'translate' 到 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
ML.net 支持 ONNX 模型,如此 example.
您可以通过WinMLTools
将您的keras模型转换为ONNX模型正如 Cihan Yakar 和 Jon 提到的那样,解决方案是将模型转换为 ONNX。我找到了一个很好的教程来解释如何操作:
我也经历过相同的过程,我强烈建议先使用 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 class 基本上通过过滤图像文件(从目录中)读取 imageFolder 中的图像并使用两个属性识别它们, 标签是文件名,ImagePath 是图像文件的路径。 OnnxModelScorer class 运行加载模型和预测方法。
这就是 python Keras 从 C# 生成模型预测所需的全部内容。