Problema durante il caricamento / pubblicazione del modello di tensorflow in java utilizzando gli stimatori

Ho usato i dati del censimento e creato un modello ampio e profondo utilizzando l’api stimatori in tensorflow. Durante il caricamento del modello in Java, sembra esserci un errore che non consente il caricamento del modello. L’eccezione sembra

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) 

Si prega di trovare il codice python qui sotto utilizzato per salvare il modello: https://gist.github.com/gaganmalhotra/cd6a5898b9caf9005a05c8831a9b9153

Il codice Java utilizzato è il seguente:

  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: versione di Tensorflow utilizzata: 1.3

    Quando si utilizzano le operazioni nel modulo tf.contrib , non sono considerate sperimentali, quindi non fanno parte dell’API TensorFlow stabile e non sono incluse in altre distribuzioni di lingua.

    Tuttavia, in TensorFlow 1.4 e versioni successive è ansible caricare in modo esplicito la libreria condivisa in Java utilizzando TensorFlow.loadLibrary() .

    Per farlo, devi prima trovare la posizione della libreria condivisa che contiene l’implementazione dell’operazione tf.contrib cui sei interessato. In questo caso sembra che sia tf.contrib.layers , quindi dovresti fare qualcosa come questo:

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

    Quale stamperebbe qualcosa come:

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

    Quindi dovresti trovare tutte le librerie condivise in quel percorso usando qualcosa come:

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

    Quale sarebbe qualcosa di simile:

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

    Bene, ora hai quella libreria, puoi caricarla in Java usando:

     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. } 

    Avvertenze:

    • Se si desidera eseguire su un altro computer, si desidera impacchettare il file .so alto con il programma e regolare la chiamata su TensorFlow.loadLibrary() appropriato.

    • Assicurati di utilizzare la stessa versione di TensorFlow per Python e Java (1.4)

    Spero possa aiutare.