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