在Tensorflow.NET中加载模型的最佳方法是什么

时间:2020-07-07 16:40:21

标签: c# tensorflow

我在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)之类的东西,如何从图表/会话中获取该信息?

1 个答案:

答案 0 :(得分:0)

是的,我做到了。最好的方法是将软件包转换为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中给它起一个好听的名字。您可以通过运行net_keras.summary()

在python中检查名称