首页 > 解决方案 > 在 Tensorflow.NET 中加载模型的最佳方法是什么

问题描述

我在 python 中保存了一个 tensorflow.keras 模型,需要在 C#/Tensorflow.NET 0.15 中使用

var net = tf.keras.models.load_model(net_name)似乎没有实施

var session = tf.Session.LoadFromSavedModel(net_name);
var graph = sess.graph;

似乎有效,但我有一个会话/图表而不是 keras 模型

理想情况下,我想调用类似的东西net.predict(x),我怎样才能从图形/会话中到达那里?

标签: c#tensorflow

解决方案


是的,我做到了。最好的方法是将您的包转换为 ONNX 格式。ONNX 是一种开源格式,应该可以在任何框架(tensorflow、torch...)上运行

在 python 中,添加包 onnx 和 keras2onnx:

import onnx
import keras2onnx
import onnxruntime
   

    net_onnx = keras2onnx.convert_keras(net_keras)

    onnx.save_model(net_onnx, onnx_name)

然后在 C# .NET 中,安装 nuget Microsoft.ML。

var context = new MLContext();
var session = new InferenceSession(filename);
float[] sample;
int[] dims = new int[] { 1, sample_size};
var tensor = new DenseTensor<float>(sample,dims);
var xs = new List<NamedOnnxValue>()
{
  NamedOnnxValue.CreateFromTensor<float>("dense_input", tensor),
};

using (var results = session.Run(xs))
{
 // manipulate the results
}

请注意,您需要显式调用网络的第一层或输入层来传递样本。最好是在 Keras 中给它起一个好听的名字。您可以通过运行在 python 中检查名称net_keras.summary()


推荐阅读