在Tensorflow for Java中加载预先训练的模型

在Tensorflow for Java中加载预先训练的模型,java,tensorflow,pre-trained-model,Java,Tensorflow,Pre Trained Model,我正在尝试使用JavaAPI加载Tensorflow 我注意到,随着时间的推移,保存的模型文件的格式发生了变化,现在保存的模型的文件格式为.pb,.ckpt,模型目录为model.ckpt.data-00000-of-00001,model.ckpt.index 我将按照以下方式阅读中指定的模型。但在本例中,文件格式为protobuf.pb。我看到最新保存的模型以.ckpt或model.ckpt.data-00000-of-00001,model.ckpt.index格式保存 我尝试将该方法用于

我正在尝试使用JavaAPI加载Tensorflow

我注意到,随着时间的推移,保存的模型文件的格式发生了变化,现在保存的模型的文件格式为
.pb
.ckpt
,模型目录为
model.ckpt.data-00000-of-00001,model.ckpt.index

我将按照以下方式阅读中指定的模型。但在本例中,文件格式为protobuf
.pb
。我看到最新保存的模型以
.ckpt
model.ckpt.data-00000-of-00001,model.ckpt.index
格式保存

我尝试将该方法用于包含文件-
model.ckpt.data-00000-of-00001
model.ckpt.index
export\u dir
,但我得到了这个错误

`2018-07-18 16:54:00.388790: I tensorflow/cc/saved_model/loader.cc:291] SavedModel load for tags { }; Status: fail. Took 95 microseconds.
线程“main”org.tensorflow.TensorFlowException中的异常:在导出目录:/path/to/model\u dir中找不到SavedModel 在org.tensorflow.SavedModelBundle.load(本机方法)上 在org.tensorflow.SavedModelBundle.load上(SavedModelBundle.java:39)


有人能告诉我我做错了什么,或者告诉我如何读取以文件格式保存的模型,而不是Java中的
.pb

我认为有两种方法可以解决您的问题:

  • 将保存的模型(检查点文件)的格式转换为protobuf文件
  • 将保存的模型恢复到当前会话:sess后

    # Freeze the graph, with output _node_names is the name of the output when construct the model  
    # Eg. output_node_names = ["prediction"]
    frozen_graph_def = tf.graph_util.convert_variables_to_constants (sess, sess.graph_def, output_node_names)
    
    # Save the frozen graph  
    with open (frozen_graph_file, "wb") as f:    
       f.write(frozen_graph_def.SerializeToString()
    
    它应该将以前的格式转换为新格式

  • 重新训练模型并将其保存为.pb格式