Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/python/276.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
tensorflow.keras用python保存模型并用Java加载_Java_Python_Tensorflow_Keras - Fatal编程技术网

tensorflow.keras用python保存模型并用Java加载

tensorflow.keras用python保存模型并用Java加载,java,python,tensorflow,keras,Java,Python,Tensorflow,Keras,我有一个经过优化的vgg模型,我使用tensorflow.keras函数API创建了该模型,并使用tf.contrib.saved_model.save_keras_model保存了该模型。 因此,模型以这种结构保存:资产文件夹,其中包含保存的_model.json文件,保存的_model.pb文件,变量文件夹,其中包含检查点,变量.data-00000-of-00001和变量.index 我可以轻松地用python加载模型,并使用tf.contrib.saved_model.load_kera

我有一个经过优化的vgg模型,我使用tensorflow.keras函数API创建了该模型,并使用tf.contrib.saved_model.save_keras_model保存了该模型。 因此,模型以这种结构保存:资产文件夹,其中包含保存的_model.json文件,保存的_model.pb文件,变量文件夹,其中包含检查点变量.data-00000-of-00001变量.index

我可以轻松地用python加载模型,并使用tf.contrib.saved_model.load_keras_model(saved_model_path)获得预测,但我不知道如何用JAVA加载模型。我在谷歌上搜索了很多,发现这个文件可以导出为pb文件,然后按照这个链接加载。我无法冻结图形,也尝试使用simple\u save,但tensorflow.keras不支持simple\u save(属性错误:模块“tensorflow.contrib.saved\u model”没有属性“simple\u save”)。那么,有人能帮我弄清楚在JAVA中加载模型(tensorflow.keras functional API model)需要哪些步骤吗

我保存的_model.pb文件是否足够好,可以在JAVA端加载?我是否需要创建输入/输出占位符?那我怎样才能导出它呢?

非常感谢您的帮助。

如果您有一个以SavedModel格式保存的模型(看起来您是这样做的,并且类似的东西可以帮助创建),那么您可以使用Java来加载和提供它。您不需要“冻结”模型

您可能会发现以下内容很有用:

  • 关于JavaAPI和SavedModel格式
但是基本的想法是,您的代码看起来像:

try (SavedModelBundle model = SavedModelBundle.load("<directory>", "serve")) {
  try (Tensor<?> input = makeInputTensor();
       Tensor<?> output = model.session().runner().feed("INPUT_TENSOR", input).fetch("OUTPUT_TENSOR", output).run().get(0)) {
  // Use output
  }
}
try(SavedModelBundle model=SavedModelBundle.load(“,“service”)){
try(张量输入=makeInputSensor();
Tensor output=model.session().runner().feed(“输入张量”,输入)。fetch(“输出张量”,输出)。run().get(0)){
//使用输出
}
}
其中,
“INPUT\u TENSOR”
“OUTPUT\u TENSOR”
是TensorFlow图中输入和输出节点的名称。安装TensorFlow for Python时安装的
saved_model_cli
命令行工具可以显示模型中这些张量的名称

请注意,使用TensorFlow Java API可能比使用TensorFlow Lite更适合服务器/桌面应用程序,正如另一位评论者所建议的那样。这是因为TensorFLow Lite运行时虽然针对小型设备进行了优化(在内存占用等方面),但还不能导出所有模型。而TensorFlow Java API使用完全相同的运行时,因此具有与TensorFlow for Python完全相同的功能


希望这能有所帮助。

您可以使用TensorFlow Lite,而不是我做的完全相同的事情。当我使用Inception模型作为预先训练的模型时,它最终运行良好。但当我使用VGG模型作为基础时,我的模型不能用JAVA加载。您看过加载VGG模型并对其进行微调,然后用JAVA加载的教程吗?我将向您发送我在尝试VGG模型时遇到的错误。我非常感谢你的帮助。这是我得到的错误:矩阵大小不兼容:在[0]:[18192],在[1]:[25088256][{{node densite/MatMul}}}=MatMul[T=DT_FLOAT,[u output_shapes=[?,256]],转置a=false,转置b=false,[u device=“/job:localhost/replica:0/task:0/device:CPU:0”](展平/重塑,密集/MatMul/readbleop]