使用估算器在java中加载/提供tensorflow模型时出现问题

我使用了人口普查数据,并使用张量流中的估计量api创建了一个广泛而深入的模型。 在Java中加载模型时,似乎存在一个错误,它不允许加载模型。 看起来像是例外

Exception in thread "main" org.tensorflow.TensorFlowException: Op type not registered 'SparseFeatureCross' in binary running on gmalhotra-mba-2.local. Make sure the Op and Kernel are registered in the binary running in this process. at org.tensorflow.SavedModelBundle.load(Native Method) at org.tensorflow.SavedModelBundle.load(SavedModelBundle.java:39) at deeplearning.DeepLearningTest.main(DeepLearningTest.java:32) 

请找到以下用于保存模型的python代码: https : //gist.github.com/gaganmalhotra/cd6a5898b9caf9005a05c8831a9b9153

使用的Java代码如下:

  public static void main(String[] args) { try (SavedModelBundle b = SavedModelBundle.load("/Users/gagandeep.malhotra/Documents/SampleTF_projects/temporaryModel/1510624417/", "serve")) { Session sess = b.session(); //Create the input sensor float[][] mat=new float[1][1]; mat[0]=new float[]{0.5f}; // create tensors specific to inputs .... Tensor x = (Tensor) Tensor.create(mat); //run the model float[][] y = sess.runner() .feed("input", x) .fetch("output") .run() .get(0) .copyTo(new float[1][1]); //print the result System.out.println(y[0][0]); } 

PS:使用的Tensorflow版本:1.3

当您在tf.contrib模块中使用操作时,它们不被视为实验性的,因此不属于稳定的TensorFlow API ,也不包含在其他语言分发中。

但是,在TensorFlow 1.4及更高版本中,您可以使用TensorFlow.loadLibrary()在Java中显式加载共享库。

要做到这一点,首先你需要找到包含你感兴趣的tf.contrib操作实现的共享库的位置。在这种情况下,它似乎是tf.contrib.layers ,所以你要做点什么像这样:

 python -c "import tensorflow; print(tensorflow.contrib.layers.__path__)" 

哪个会打印像:

 ['/usr/local/lib/python2.7/dist-packages/tensorflow/contrib/layers'] 

然后,您将使用以下内容找到该路径中的所有共享库:

 find /usr/local/lib/python2.7/dist-packages/tensorflow/contrib/layers -name "*.so" 

这将是这样的:

 /usr/local/lib/python2.7/dist-packages/tensorflow/contrib/layers/python/ops/_sparse_feature_cross_op.so 

好的,现在你有了这个库,你可以用Java加载它:

 public static void main(String[] args) { TensorFlow.loadLibrary("/usr/local/lib/python2.7/dist-packages/tensorflow/contrib/layers/python/ops/_sparse_feature_cross_op.so"); // And now load the model etc. } 

注意事项:

  • 如果要在不同的计算机上运行,​​则需要将上面的.so文件与程序打包在一起,并适当调整对TensorFlow.loadLibrary()的调用。

  • 确保您使用的是与Python和Java相同的TensorFlow版本(1.4)

希望有所帮助。