2017-12-25 16 views
1

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", 
    ], 
)` 

답변

0

이 문제는 얼굴 전체 시간을 나를 응시했다 : 빌드가과 같이있는 동안 tensorboard에서와 오류, 연산은 strided_slice [0-9]입니다. T = DT_INT64는 strided_slice에 등록 된 커널 중 하나가 아닙니다. 슬라이스하기 전에 캐스팅 할 모델을 편집하면 문제가 해결되었습니다.

참고 : 사용자 정의 연산을 등록하는에 https://github.com/tensorflow/tensorflow/issues/13772

!

편집 그냥 작업의 순서를 변경하는 데 필요한

!