【问题标题】:How to add operations into Tensorflow Android build如何在 Tensorflow Android 构建中添加操作
【发布时间】:2017-07-06 02:22:50
【问题描述】:

我正在尝试在 Android 上运行我的 Tensorflow 模型,所以我使用 nightly native build in here 并遵循 Android demo,我已成功运行 Tensorflow Android 库并使用以下代码加载模型。

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

而且日志显示结果很好。

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'

但是,当我完成所有输入节点的输入时

inferenceInterface.feed("input1", new int[]{1, 2, 3}, 1, 3);
inferenceInterface.feed("input2", new int[]{3}, 1);
inferenceInterface.feed("input3", new int[]{4}, 1);

然后调用run方法

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

Tensorflow 坏了说有些内核没有注册

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

我认为 int32 的“LessEqual”应该在 Tensorflow 中定义,但不能与 Tensorflow Android Lib 一起构建。

所以我的问题是如何在 Android lib 构建中包含更多内核或任何其他方式来解决这个问题,任何帮助将不胜感激。

【问题讨论】:

    标签: java android build tensorflow


    【解决方案1】:

    我推荐阅读这本免费电子书:Building Mobile Applications with TensorFlow

    它有一个关于 What Ops Are Available on Mobile? 的部分(第 33 页),它解释了如何为那些默认为移动构建剥离的操作内核使用 Add the implementation to the build

    仅供参考,这本电子书的作者是 Pete Warden(GitHubblog),他在 Google 工作,是 TensorFlow 的维护者之一。

    【讨论】:

    • 是的,我读到了,实际上问题也通过 tensorflow 源代码得到解决。这本书非常好。
    • 嗨,丹,我刚刚浏览了您链接的电子书。我想在安卓上使用DecodeJpeg op。默认情况下不包含此操作。我已经找到了操作的实现,但我不明白如何将它包含在构建中。电子书上说要添加实现文件herehere。那要怎么做呢?
    猜你喜欢
    • 2021-12-10
    • 1970-01-01
    • 2019-12-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2016-03-19
    • 2018-06-29
    • 1970-01-01
    相关资源
    最近更新 更多