Fix cosine similarity calculation error
authorDonghyeon Jeong <dhyeon.jeong@samsung.com>
Wed, 9 Aug 2023 07:27:57 +0000 (16:27 +0900)
committerJijoong Moon <jijoong.moon@samsung.com>
Mon, 21 Aug 2023 06:29:23 +0000 (15:29 +0900)
Computing cosine similarity in FP16 gives inaccurate results (compute in double).

Signed-off-by: Donghyeon Jeong <dhyeon.jeong@samsung.com>
test/include/nntrainer_test_util.h

index 9ecef188f0e641bb1cb78731f22ec855aaeeeb77..7d5f2668eb0395bfb91a9ce9017db7d481f96f14 100644 (file)
@@ -263,8 +263,8 @@ double cosine_similarity(Ta *A /*Predict*/, Tb *B /*Reference */,
                          uint32_t size) {
   double dot = 0.0, denom_a = 0.0, denom_b = 0.0;
   for (uint32_t i = 0u; i < size; ++i) {
-    Ta pred = A[i];
-    Tb ref = B[i];
+    double pred = A[i];
+    double ref = B[i];
     dot += pred * ref;
     denom_a += pred * pred;
     denom_b += ref * ref;
@@ -279,8 +279,8 @@ double cosine_similarity(Ta *A /*Predict*/, Tb *B /*Reference */,
 
 template <typename Ta = float, typename Tb = float>
 float mse(Ta *A /* Predicted */, Tb *B /* Reference */, uint32_t size) {
-  Ta pred;
-  Tb ref;
+  float pred;
+  float ref;
   float mse_error = 0;
   for (uint32_t i = 0; i < size; i++) {
     pred = A[i];