Как выполнить вывод модели тензор потока в Android - PullRequest
0 голосов
/ 01 октября 2018

Я пытался использовать Tensorflow Lite, но у него много ограничений, у него нет операции пакетной нормализации, и даже при простых операциях он дал очень странный результат тем же данным, которые были протестированы с Keras.Это значит, что с keras все работает, с tenorflow lite результат совершенно неверный.Поэтому мне нужно что-то, чтобы выполнить файл .pb на Android.

1 Ответ

0 голосов
/ 08 ноября 2018

Вы можете использовать TensorFlowInferenceInterface, чтобы делать прогнозы, используя файл .pb.Сначала поместите файл .pb в папку ресурсов вашего приложения.

  1. В файле build.gradle (Module: app) добавьте следующую зависимость: implementation 'org.tensorflow:tensorflow-android:1.11.0'
  2. Затем инициализируйтеTensorFlowInferenceInterface, если имя файла вашей модели - "model.pb", тогда TensorFlowInferenceInterface tensorFlowInferenceInterface = new TensorFlowInferenceInterface(context.getAssets() , "file:///android_asset/model.pb") ;
  3. tensorFlowInferenceInterface.feed( INPUT_NAME , inputs , 1, 28, 28);, где INPUT_NAME - имя вашего входного слоя.1 , 50 - входные размеры.

  4. tensorFlowInferenceInterface.run( new String[]{ OUTPUT_NAME } );, где OUTPUT_NAME - имя выходного слоя.

  5. float[] outputs = new float[ nuymber_of_classes ]; tensorFlowInferenceInterface.fetch( OUTPUT_NAME , outputs ) ;

outputs - это значения с плавающей точкой, предсказанные вашей моделью.

Вот полный код:

TensorFlowInferenceInterface tensorFlowInferenceInterface = new 
TensorFlowInferenceInterface(context.getAssets() , "file:///android_asset/model.pb");
tensorFlowInferenceInterface.feed( INPUT_NAME , inputs , 1, 28, 28);
tensorFlowInferenceInterface.run( new String[]{ OUTPUT_NAME } );
float[] outputs = new float[ nuymber_of_classes ];
tensorFlowInferenceInterface.fetch( OUTPUT_NAME , outputs ) ;
...