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