我已经培训了TensorFlow模型,该模型除其他外还执行涉及tf.cos
操作的输入准备。我现在已将此模型集成到Android应用程序中,但它无法执行推理并产生错误No OpKernel was registered to support Op 'Cos'
(下面的完整错误)。
我尝试过的事情:
我已经构建了selective registration header并确保ops_to_register.h
包含Cos
运营商
我已按照建议in a related TensorFlow issue重建libtensorflow_inference.so
,同时确保在构建ops_to_register.h
文件时使用.so
我将新的libtensorflow_inference.so
文件放入我的应用app/src/main/jniLibs/<architecture>
,同时确保应用使用了新的.so
文件
我仍然得到同样的错误。
另外,不确定这是否相关,但tf_op_files.txt和BUILD中缺少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)
答案 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
中,您需要执行以下操作:
确保libtensorflow_inference.so
文件中包含|| isequal(op, "Cos")
(请参阅上面的说明)
在tensorflow / core / kernels / BUILD中将ops_to_register.h
添加到cwise_op_cos.cc
文件组
android_extended_ops_group1
用于正确的架构
后来我甚至发现其中一个TensorFlow开发人员建议在这种情况下建议破解BUILD文件:/
Android仅构建操作的子集,您需要添加操作 你需要通过黑客攻击构建不在“常用集合”中 文件满足您的需求。
来源:https://github.com/tensorflow/tensorflow/issues/11804#issuecomment-318415228