Java-从HDFS读取Tensorflow模型(PB文件)

时间:2018-10-10 11:17:58

标签: java arrays hadoop tensorflow tensorflow-serving

我看到SavedModelBundle.load没有从HDFS中读取。 我正在执行以下操作,以Byte array的格式从HDFS读取文件并将其作为图形导入。

hdfs = FileSystem.get(new URI(configuration.get("fs.defaultFS")), configuration);
    if (hdfs.exists(location)) {
        FSDataInputStream hdfsInputStream = hdfs.open(location);
        int length = (int) hdfs.getFileStatus(location).getLen();
        byte[] model = new byte[hdfsInputStream.available()];
        hdfsInputStream.read(model);

        hdfsInputStream.close();
        final Graph g = new Graph();
        g.importGraphDef(model);
        Session session = new Session(g);
}

我也尝试过使用hdfsInputStream.readfully(model)。它给出了以下相同错误:

java.lang.IllegalArgumentException: Invalid GraphDef
at org.tensorflow.Graph.importGraphDef(Native Method)
at org.tensorflow.Graph.importGraphDef(Graph.java:130)
at org.tensorflow.Graph.importGraphDef(Graph.java:114)

我的问题是:

  1. HDFS是否有与SavedModelBundle.load等效的Java?
  2. 有什么选择?如何将.pb文件读取为byte array并正确导入为张量流图?

注意:如果我使用SavedModelBundle.load(path)函数从本地文件系统中读取模型目录,则上述所有方法都可以正常工作。从本地,我无法正确读取字节数组并将其转换为图形。但是,读取bundle可以正常工作并提供正确的输出。

0 个答案:

没有答案