나는 양자화 그래프를 Android 앱에로드하려고합니다. 내 빌드 파일 빌드 ++ 독립 C에 대한Android 용 Tensorflow 퀀 타이즈 그래프
deps = ["//tensorflow/core:android_tensorflow_lib",
"//tensorflow/contrib/quantization:cc_array_ops",
"//tensorflow/contrib/quantization:cc_math_ops",
"//tensorflow/contrib/quantization:cc_nn_ops",
"//tensorflow/contrib/quantization/kernels:quantized_ops"]
추가 양자화 deps 작업이 포함되어 있습니다.
GEMMLOWP에서 많은 오류가 발생하여 Bazel을 사용하여 컴파일 할 수 없습니다. 안드로이드에서 gemmlowp와 양자화 연산을 포함시키는 적절한 방법은 무엇입니까?
external/gemmlowp/eight_bit_int_gemm/eight_bit_int_gemm.cc:125:13: error: 'int32_t' is not a member of 'std'
MatrixMap<std::int32_t, ResultOrder> result(c, m, n, ldc);
이 Bazel 0.3.0 우분투 16.04에있다 : 여기
은 예시적인 에러이다.다음은 패키지를 빌드하기위한 두 번의 연속 시도가있는 요지입니다. 처음에는 고속도로에서 실패하고 두 번째에는 gemmlowp가 실패합니다. https://gist.github.com/ericdanz/81b799f2e0bbb3cc462aa3c90468c71b
궁극적으로 컴파일과의 자유뿐만 아니라 실행하는 데있어 "-std = C++ 11"gemmlowp 및 highwayhash 및 양자화 된 작전에서 프레임 워크 종속성에 대한 안드로이드 프레임 워크의 교체의 빌드 파일입니다. 그것은 상당히 다른 결과를 산출하지만, 약 4 배 더 느리게 실행됩니다 (26-3200ms vs 6-800ms). 좀 더 깊이 조사하려고 노력할거야.
가에 quantized_ops
추가 : 그것은 기본적으로 위의 에릭 D에서 모든 의견의 조합이지만, 나는이 문제에 걸쳐 오는 새로운 사람을 한 곳에서 모두 넣고 싶어 -
죄송합니다. 문제가 발생했습니다. 어떤 호스트 OS (예 : Ubuntu, OS X)를 컴파일하고 있습니까? –
gemmlowp의 저자는 다음과 같은 제안을했습니다. "이것은 Miao Wang이 여기에서 작업 한 문제와 관련이있는 것으로 보입니다. https://github.com/google/gemmlowp/blob/master/ profiling/instrumentation.h # L30 내 생각 엔이 사용자가 오래된 Android API 버전을 타겟팅하여 STLport가 사용되는 것일 수 있습니다.이 경우 # define GEMMLOWP_USE_STLPORT가 도움이 될까요? –
C++ 11이 제대로 사용되지 않는 것 같습니다. 외부/gemmlowp/eight_bit_int_gemm /../ public /../ internal /../ public/bit_depth.h : 39 : 1 : 경고 : 범위 지정 enum은 -std = C++ 11 또는 -std = gnu에서만 사용 가능합니다. ++ 11 enum 클래스 RoundingMode { ^ 외부/gemmlowp/eight_bit_int_gemm /../ public /../ internal /../ public/bit_depth. '콥트 = tf_copts :; 시간 : 51 : 58 : 오류' 내 빌드 파일의 cc_binary 부분에이 값을 사용하고 '되는 RoundingMode는'클래스 또는 네임 스페이스 const 정적되는 RoundingMode kRoundingModeForSmallSizes = RoundingMode에 :: 정확한 아니다() + [ "-std = C++ 11", "- O3"]' –