2017-11-14 3 views
0

센서스 데이터를 사용하여 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) 

파이썬 코드는 아래의 모델을 저장하는데 사용 찾아주세요 같은 예외 같습니다 https://gist.github.com/gaganmalhotra/cd6a5898b9caf9005a05c8831a9b9153

다음과 같이 사용

자바 코드는 다음과 같습니다

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

답변

2

tf.contrib 모듈에서 연산을 사용하면 실험적으로 간주되지 않으므로 n stable 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()로 조정하십시오. 도움이

  • 파이썬과 자바 (1.4)에 대해 동일한 TensorFlow 버전을 사용하고 있는지 확인

희망.

+0

당신이 언급하고 돌아 오는 방식으로 사용할 수있는 회피 방법에 대해 너무 많이 고맙습니다! –

관련 문제