2017-07-06 7 views
3

TensorflowモデルをAndroidで実行しようとしているので、nightly native build in hereを使用し、Android demoに続いて、Tensorflow Androidのlibを実行して、以下のモデルをロードしました。コード。Tensorflow Androidビルドに操作を追加する方法

inferenceInterface = new TensorFlowInferenceInterface(getAssets(), MODEL_FILE); 

ログは結果が良好であることを示します。私は

inferenceInterface.feed("input1", new int[]{1, 2, 3}, 1, 3); 
inferenceInterface.feed("input2", new int[]{3}, 1); 
inferenceInterface.feed("input3", new int[]{4}, 1); 
すべての入力ノードを送り

を終えたときに

I/TensorFlowInferenceInterface: Successfully loaded TensorFlow native methods (RunStats error may be ignored) 
I/TensorFlowInferenceInterface: Model load took 1007ms, TensorFlow version: 1.2.0-rc0 
I/TensorFlowInferenceInterface: Successfully loaded model from 'file:///android_asset/model.pb' 

しかし、その後Tensorflowは、いくつかのカーネルが

に登録されていないことを言って壊れている

inferenceInterface.run(new String[]{"output"}); 

runメソッドを呼び出します

E/TensorFlowInferenceInterface: Failed to run TensorFlow inference with inputs:[input1, input2, input3], outputs:[output] 
D/AndroidRuntime: Shutting down VM 
E/AndroidRuntime: FATAL EXCEPTION: main 
Process: ...jnitest, PID: 16357 
java.lang.RuntimeException: Unable to start activity ComponentInfo{...MainActivity}: java.lang.IllegalArgumentException: No OpKernel was registered to support Op 'LessEqual' with these attrs. Registered devices: [CPU], Registered kernels: 
<no registered kernels> 

[[Node: .../LessEqual = LessEqual[T=DT_INT32](.../maximum_iterations, .../LessEqual/y)]] 
at android.app.ActivityThread.performLaunchActivity(ActivityThread.java:2665) 
at android.app.ActivityThread.handleLaunchActivity(ActivityThread.java:2726) 
at android.app.ActivityThread.-wrap12(ActivityThread.java) 
at android.app.ActivityThread$H.handleMessage(ActivityThread.java:1477) 
at android.os.Handler.dispatchMessage(Handler.java:102) 
at android.os.Looper.loop(Looper.java:154) 
at android.app.ActivityThread.main(ActivityThread.java:6119) 
at java.lang.reflect.Method.invoke(Native Method) 
at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:886) 
at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:776) 
Caused by: java.lang.IllegalArgumentException: No OpKernel was registered to support Op 'LessEqual' with these attrs. Registered devices: [CPU], Registered kernels: 
<no registered kernels> 

[[Node: dynamic_seq2seq/decoder/decoder_1/LessEqual = LessEqual[T=DT_INT32](.../maximum_iterations, .../LessEqual/y)]] 
at org.tensorflow.Session.run(Native Method) 
at org.tensorflow.Session.access$100(Session.java:48) 
at org.tensorflow.Session$Runner.runHelper(Session.java:295) 
at org.tensorflow.Session$Runner.run(Session.java:245) 
at org.tensorflow.contrib.android.TensorFlowInferenceInterface.run(TensorFlowInferenceInterface.java:142) 
at org.tensorflow.contrib.android.TensorFlowInferenceInterface.run(TensorFlowInferenceInterface.java:111) 
at ...jnitest.MainActivity.onCreate(MainActivity.java:52) 
at android.app.Activity.performCreate(Activity.java:6679) 
at android.app.Instrumentation.callActivityOnCreate(Instrumentation.java:1118) 
at android.app.ActivityThread.performLaunchActivity(ActivityThread.java:2618) 
.. 9 more 

Ithインクは、Tensorflowでint32の "LessEqual"を定義する必要がありますが、Tensorflow Android Libと共に構築する必要はありません。

私の質問は、これを解決するためにAndroidのlibビルドや他の方法でより多くのカーネルを追加する方法です。どんな助けでも大歓迎です。

答えて

4

私はこの無料の電子ブック読んで推薦:Building Mobile Applications with TensorFlow

をそれは、これらのオペアンプカーネルモバイルビルドのために取り除かれることに既定のためAdd the implementation to the buildする方法を説明している、What Ops Are Available on Mobile?(33ページ)のセクションを持っています。

FYIのeBookは、Googleで働くPete Warden(GitHubblog)によって書かれたもので、TensorFlowのメンテナーの一人です。

+0

はい、私はそれを読んで、実際にはテンソルフローのソースコードを調べることで解決します。そしてその本はとても良いものです。 – resec

関連する問題