Android Studio에서 볼 수있는 일반적인 오류입니다. 나는 'gather_nd_op'이 최근에 추가 된 것을 보았고 master에있는 것에 대해 내 tf_op_files.txt
을 점검 할 때까지 'GatherNd'에 이것을 보았습니다. bazel (jcenter/'none'이 여전히 'GatherNd'를 찾지 못하는 것 같지만)로 만든 후에는 더 이상이 사실을 알 수 없습니다. 그러나 나는 이것을 'StridedSlice'로 보았습니다.No OpKernel Tensorflow 모바일 Android. 디버깅하는 방법?
java.lang.IllegalArgumentException: No OpKernel was registered to support Op 'StridedSlice' with these attrs. Registered devices: [CPU], Registered kernels:
device='CPU'; T in [DT_BFLOAT16]
device='CPU'; T in [DT_BOOL]
device='CPU'; T in [DT_FLOAT]
device='CPU'; T in [DT_INT32]
[[Node: roi_align_classifier/strided_slice = StridedSlice[Index=DT_INT32, T=DT_INT64, begin_mask=1, ellipsis_mask=0, end_mask=1, new_axis_mask=0, shrink_axis_mask=2](roi_align_classifier/Where, roi_align_classifier/strided_slice/stack, roi_align_classifier/strided_slice/stack_1, roi_align_classifier/strided_slice/stack_2)]]
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:218)
나는이 영업 이익은 tf_op_files.txt
과 오류가 잘못된 매개 변수를 사용에서 발생할 수있는 것을 알 수있다. 입력 및 출력 형식을 float []에서 int []로 변경하려고 시도했지만 행운은 없습니다.
array_ops.cc의 strided_slice 및 https://www.tensorflow.org/api_docs/python/tf/strided_slice에 유형 서명 및 정보가 표시됩니다. 그러나 이것들은 제가 잘못된 매개 변수를 단순히 제공하고 있는지 또는 실제로 사용하고 있지 않은 StridedSlice
을 제공하고 있는지에 대한 훌륭한 통찰력을 제공하지 못합니다!
내 질문은 : 나는 이것을 임의의 추측보다 더 결정론적인 방법으로 어떻게 디버깅합니까?
편집 http://www.oreilly.com/data/free/files/building-mobile-applications-with-tensorflow.pdf을 확인,이 구현이 정확하고 현재 모바일 지원되지 않는 것 같습니다? 즉. 이 오류 메시지는 전달 된 입력 및 출력에 종속되지 않습니다. 이게 옳은 거니? 나는 op를 추가하는 것이 다소 간단 할 것이라고 생각한다. 문제가 무엇인지 유형이 무엇인지 알아야합니다.
나는 또한 https://medium.com/joytunes/deploying-a-tensorflow-model-to-android-69d04d1b0cba을 찾았습니다. 즉, 안드로이드/타입면에 대한 모든 디버깅 정보가 훌륭하다고 말했습니다. 즉. op에 전달되는 타입은 무엇이며 예상되는 것은 무엇입니까? 그것은 내가 모든 작전을 찾은 후이
편집 2
를 결정하기 위해 외부 자원을 사용해야하는 것, 양자화, 입력 노드와 출력 노드의 출력의 입력을 받고, 나는 strided_slice_op.cc을 추가하는 시도 android_extended_ops_group2에는 건물을 만들 때 이미 존재하는 것을 볼 수 있습니다. 다른 구현을 추가해야한다고 생각합니다. 누구든지 노드의 전체 형식 서명을 얻는 방법을 알고 있으며 올바른 경로에있는 것처럼 보입니까?
`tf_kernel_library(
name = "strided_slice_op",
srcs = [
"strided_slice_op.cc",
"strided_slice_op_inst_0.cc",
"strided_slice_op_inst_1.cc",
"strided_slice_op_inst_2.cc",
"strided_slice_op_inst_3.cc",
"strided_slice_op_inst_4.cc",
"strided_slice_op_inst_5.cc",
"strided_slice_op_inst_6.cc",
"strided_slice_op_inst_7.cc",
],
hdrs = [
"slice_op.h",
"strided_slice_op.h",
"strided_slice_op_impl.h",
],
gpu_srcs = [
"slice_op.h",
"strided_slice_op.h",
"strided_slice_op_impl.h",
"strided_slice_op_gpu.cu.cc",
],
deps = [
":bounds_check",
":dense_update_functor",
":ops_util",
":variable_ops",
"//tensorflow/core:framework",
"//tensorflow/core:lib",
"//third_party/eigen3",
],
)`