如何在Tensorflow'中加载使用“saver.save”保存的模型;s Java API

如何在Tensorflow'中加载使用“saver.save”保存的模型;s Java API,java,tensorflow,Java,Tensorflow,我正在尝试使用新的JavaAPI从磁盘读取模型 使用Tensorflow的Java API演示了如何读取既有图形定义又有参数权重的.pb模型文件 在Python方面,Tensorflow建议使用Saver对象将模型保存到磁盘。它创建了一个.meta文件,该文件具有权重的定义和.data文件。在Python中,我使用new\u saver=tf.train.import\u meta\u图(var\u文件名) 新建\u saver.restore(sess,型号\u文件名)从磁盘读取型号 如何在J

我正在尝试使用新的JavaAPI从磁盘读取模型

使用Tensorflow的Java API演示了如何读取既有图形定义又有参数权重的
.pb
模型文件

在Python方面,Tensorflow建议使用
Saver
对象将模型保存到磁盘。它创建了一个
.meta
文件,该文件具有权重的定义和
.data
文件。在Python中,我使用
new\u saver=tf.train.import\u meta\u图(var\u文件名)
新建\u saver.restore(sess,型号\u文件名)
从磁盘读取型号

如何在Java API中实现这一点?

该类可能正是您想要的。特别是,
SavedModelBundle.load()
将返回一个会话,您可以使用该会话执行保存的模型


请注意,这个特性是最近添加到JavaAPI中的,因此二进制版本中还不存在它,因此您必须等到TensorFlow 1.1发布后才能使用

我正在做类似的事情,使用python接口在hadoop集群上训练模型,并使用模型和学到的参数在java中进行预测

  • 保存模型的步骤

    您必须使用SavedModelBuilder。在这里您可以找到指导: 您可以使用他们的mnist示例构造函数签名

java方面的用法非常简单:

SavedModelBundle load = SavedModelBundle.load(modelDir, "serve");
        float[][] resultArray;
        try (Graph g = load.graph()) {
            try (Session s = load.session();
                 Tensor result = s.runner().feed("data", data).fetch("prediction").run().get(0)) {
                resultArray = result.copyTo(new float[10][1]);
            }
        }
        load.close();
        return resultArray;
要获取提要和获取操作的名称,可以打印签名,并使用输入和输出值名称

print(prediction_signature)

太好了,谢谢。我目前的解决方案是使用
freeze\u graph
保存图形定义和权重,然后用Java读取。这门课看起来很有前途。我会等到正式发布后再在我的代码中尝试,