[NNAPI Test] Support dynamic tolerance (#509)
author박종현/동작제어Lab(SR)/Senior Engineer/삼성전자 <jh1302.park@samsung.com>
Mon, 9 Apr 2018 07:19:14 +0000 (16:19 +0900)
committer김정현/동작제어Lab(SR)/Senior Engineer/삼성전자 <jh0822.kim@samsung.com>
Mon, 9 Apr 2018 07:19:14 +0000 (16:19 +0900)
This commit allows 'nnapi_test' to dynamically adjust its tolerance level.

Signed-off-by: Jonghyun Park <jh1302.park@samsung.com>
include/util/fp32.h
tools/nnapi_test/src/nnapi_test.cc

index c916865..f42afd0 100644 (file)
@@ -19,7 +19,7 @@ inline float relative_diff(float lhs, float rhs)
   return diff / base;
 }
 
-bool epsilon_equal(float expected, float obtained)
+bool epsilon_equal(float expected, float obtained, uint32_t tolerance = 1)
 {
   if (std::isnan(expected) && std::isnan(obtained))
   {
@@ -30,7 +30,7 @@ bool epsilon_equal(float expected, float obtained)
   const auto diff = std::fabs(expected - obtained);
   const auto max = std::max(std::fabs(expected), std::fabs(obtained));
 
-  return diff <= max * FLT_EPSILON;
+  return diff <= (max * FLT_EPSILON * tolerance);
 }
 
 } // namespace fp32
index 7ba2cc9..f1e75ab 100644 (file)
@@ -121,8 +121,10 @@ TfLiteTensorComparator::compare(const nnfw::support::tflite::TensorView<float> &
 int main(const int argc, char **argv)
 {
   int verbose = 0;
+  int tolerance = 1;
 
   nnfw::util::env::IntAccessor("VERBOSE").access(verbose);
+  nnfw::util::env::IntAccessor("TOLERANCE").access(tolerance);
 
   const auto filename = argv[1];
 
@@ -151,7 +153,12 @@ int main(const int argc, char **argv)
   assert(pure->inputs() == delegated->inputs());
   assert(pure->outputs() == delegated->outputs());
 
-  TfLiteTensorComparator comparator(nnfw::util::fp32::epsilon_equal);
+  auto equals = [tolerance] (float lhs, float rhs)
+  {
+    return nnfw::util::fp32::epsilon_equal(lhs, rhs, tolerance);
+  };
+
+  TfLiteTensorComparator comparator(equals);
 
   for (const auto &id : pure->outputs())
   {