2017-08-28 20 views
5

Tensorflow grafiğimi Android'e çıkarıyorum ve çalıştırmaya çalışıyorum. Bir CSV'den veri giriyorum ve işe yaradığı görülüyor, ancak son düğümün çıktısı bir toplu x zaman x özellik_dosyasıdır ve görebildiğim tek çıktı işlevleri tek dizilerdir.Çıkış Boyutu Sorun çalışıyor TensorFlow graph Android

aldığım hatadır:

08-28 10:01:44.162 10602-10602/com.example.rob.android_kds E/TensorFlowInferenceInterface: Failed to run TensorFlow inference with inputs:[the_input], outputs:[output_node0] 
08-28 10:01:44.162 10602-10602/com.example.rob.android_kds E/TensorFlowInferenceInterface: Inference exception: java.lang.IllegalArgumentException: Input shape axis 0 must equal 3, got shape [1] 
                           [[Node: fc1/unstack = Unpack[T=DT_INT32, axis=0, num=3, _device="/job:localhost/replica:0/task:0/cpu:0"](fc1/Shape)]] 
08-28 10:01:44.162 10602-10602/com.example.rob.android_kds I/System.out: readOutput 
08-28 10:01:44.172 10602-10602/com.example.rob.android_kds E/AndroidRuntime: FATAL EXCEPTION: main 
                      Process: com.example.rob.android_kds, PID: 10602 
                      java.lang.IndexOutOfBoundsException: Invalid index 0, size is 0 
                       at java.util.ArrayList.throwIndexOutOfBoundsException(ArrayList.java:255) 
                       at java.util.ArrayList.get(ArrayList.java:308) 
                       at org.tensorflow.contrib.android.TensorFlowInferenceInterface.getTensor(TensorFlowInferenceInterface.java:486) 
                       at org.tensorflow.contrib.android.TensorFlowInferenceInterface.readNodeIntoFloatBuffer(TensorFlowInferenceInterface.java:332) 
                       at org.tensorflow.contrib.android.TensorFlowInferenceInterface.readNodeFloat(TensorFlowInferenceInterface.java:287) 
                       at com.example.rob.android_kds.MainActivity$1.onClick(MainActivity.java:171) 
                       at android.view.View.performClick(View.java:5697) 
                       at android.view.View$PerformClick.run(View.java:22526) 
                       at android.os.Handler.handleCallback(Handler.java:739) 
                       at android.os.Handler.dispatchMessage(Handler.java:95) 
                       at android.os.Looper.loop(Looper.java:158) 
                       at android.app.ActivityThread.main(ActivityThread.java:7225) 
                       at java.lang.reflect.Method.invoke(Native Method) 
                       at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:1230) 
                       at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:1120) 

Bu benim kod segment: (burada https://github.com/mlrobsmt/kds2Droid tam kodu) Herhangi bir yardım takdir

   // Copy the input data into TensorFlow. 
       System.out.println("inputNode"); 
       Trace.beginSection("fillNodeFloat"); 
       //input is 3x234x26 and array is a unravelled arr = 18252 
       tensorflow.fillNodeFloat(
         "the_input", new int[]{3 * 234 * 26}, arr); 
       Trace.endSection(); 

       // Run the inference call. 
       System.out.println("runInference"); 
       Trace.beginSection("runInference"); 
       String outputNode = "output_node0"; 
       String[] outputNodes = {outputNode}; 
       tensorflow.runInference(outputNodes); 
       Trace.endSection(); 

       // Copy the output Tensor back into the output array. 
       System.out.println("readOutput"); 
       Trace.beginSection("readNodeFloat"); 
       //output should be batchxtimex29 (3 x 234 x 29) = 20358 flattened array 
       float[] output=new float[20358]; 

       tensorflow.readNodeFloat(outputNode, output); // ERROR HERE 
       Trace.endSection(); 

, teşekkür

cevap

0

emin ama göre değil Input shape axis 0 must equal 3, got shape [1] ve sizin giriş dizinizi float[] arr=new float[18252]; tanımlayan kodunuzun bu satırında yazan hata iletinizi bekliyoruz. eption, girişinizin uygun bir şekle sahip olmamasıdır. Aslında, girişinizin bir vektör yerine 3 boyutlu bir dizi olması gerektiğini düşünüyorum.

+0

Ancak, Pooyan'ı TensorFlow giriş seçeneklerine bakmadan, onu çevirmekten ve tensorflow.fillNodeFloat ( "the_input" ( "the_input") dışında bir 3d dizi olarak girmenin bir yolu görünmüyor. ] {3 * 234 * 26}, arr); – mlrob

0

Çıktı boyutunda sorun olduğunu düşünüyorum. Tensör akışı Android'de sadece çıkış olarak 1D dizisini kabul eder. Bu nedenle, tensör akış modelinizde sadece 1D dizisi çıkardığından emin olmanız gerekir.