c# - 在 Tensorflow.NET 中加载模型的最佳方式是什么

标签 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;

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

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

最佳答案

是的,我做到了。最好的方法是将您的包转换为 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 中的名称

关于c# - 在 Tensorflow.NET 中加载模型的最佳方式是什么,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/62780009/

相关文章:

python - 培训不起作用。 "Skipping training since max_steps has already saved"

c# - 创建类型 T 的通用选择列表生成方法

tensorflow - 我的模型使用 future 的数据吗?

python - 当其中有未知元素时,操纵张量形状的正确方法是什么?

c# - Visual Studio mac 2019(社区)-PresentationCore-找不到 .Net Framework 4 的程序集

azure - Tensorflow gpu 似乎无法在 Azure 机器学习 GPU 计算上运行

tensorflow - 将嵌入层添加到 lstm 自动编码器时出现错误

c# - 布局页面的下拉列表 - MVC

c# - 不一致的可访问性字段类型调用静态类中的静态字段

c# 将 bool 值插入数据库