没有OpKernel注册支持Op' Cos'在Android上运行推理时

时间:2018-03-05 18:08:15

标签: android tensorflow

我已经培训了TensorFlow模型,该模型除其他外还执行涉及tf.cos操作的输入准备。我现在已将此模型集成到Android应用程序中,但它无法执行推理并产生错误No OpKernel was registered to support Op 'Cos'(下面的完整错误)。

我尝试过的事情:

  1. 我已经构建了selective registration header并确保ops_to_register.h包含Cos运营商

  2. 我已按照建议in a related TensorFlow issue重建libtensorflow_inference.so,同时确保在构建ops_to_register.h文件时使用.so

    < / LI>
  3. 我将新的libtensorflow_inference.so文件放入我的应用app/src/main/jniLibs/<architecture>,同时确保应用使用了新的.so文件

  4. 我仍然得到同样的错误。

    另外,不确定这是否相关,但tf_op_files.txtBUILD中缺少cwise_op_cos.cc

    我做错了吗?如何让tf.cos操作在Android上运行?

    以下是错误的相关摘录:

    java.lang.IllegalArgumentException: No OpKernel was registered to support Op 'Cos' with these attrs.  Registered devices: [CPU], Registered kernels:
      <no registered kernels>
    
     [[Node: stft/hann_window/Cos = Cos[T=DT_FLOAT](stft/hann_window/truediv)]]
      at org.tensorflow.Session.run(Native Method)
      at org.tensorflow.Session.access$100(Session.java:48)
      at org.tensorflow.Session$Runner.runHelper(Session.java:298)
      at org.tensorflow.Session$Runner.run(Session.java:248)
      at org.tensorflow.contrib.android.TensorFlowInferenceInterface.run(TensorFlowInferenceInterface.java:228)
      at org.tensorflow.contrib.android.TensorFlowInferenceInterface.run(TensorFlowInferenceInterface.java:197)
      at org.tensorflow.contrib.android.TensorFlowInferenceInterface.run(TensorFlowInferenceInterface.java:187)
    

1 个答案:

答案 0 :(得分:1)

事实证明,确实需要手动将这些命令添加到BUILD(tensorflow / core / kernels / BUILD)文件中。

因此,例如,要将file: 'file:///Users/yves/Developments/WIP/FIREBASE/vue-firebase-tutorial-store-user/src/store/state.js' severity: 'Error' message: 'Parsing error: Unexpected token [0m [90m 4 | [39m}[0m [0m [90m 5 | [39m[36mconst[39m profil[0m [0m[31m[1m>[22m[39m[90m 6 | [39m[36mexport[39m [36mdefault[39m {[0m [0m [90m | [39m[31m[1m^[22m[39m[0m [0m [90m 7 | [39m credentials[0m [0m [90m 8 | [39m}[0m [0m [90m 9 | [39m[0m' at: '6,1' source: 'eslint' code: 'undefined' 操作包含在tf.cos中,您需要执行以下操作:

  1. 确保libtensorflow_inference.so文件中包含|| isequal(op, "Cos")(请参阅上面的说明)

  2. 在tensorflow / core / kernels / BUILD中将ops_to_register.h添加到cwise_op_cos.cc文件组

  3. android_extended_ops_group1用于正确的架构

  4. 后来我甚至发现其中一个TensorFlow开发人员建议在这种情况下建议破解BUILD文件:/

      

    Android仅构建操作的子集,您需要添加操作   你需要通过黑客攻击构建不在“常用集合”中   文件满足您的需求。

    来源:https://github.com/tensorflow/tensorflow/issues/11804#issuecomment-318415228