From ea7e9f7570859016f5a5869f3cfdb0637f9da373 Mon Sep 17 00:00:00 2001
From: Hashim Sharif <hsharif3@tyler.cs.illinois.edu>
Date: Tue, 17 Sep 2019 15:23:28 -0500
Subject: [PATCH] Cleaning up Accuracy Comp Utils

---
 .../dnn_sources/include/utils.h               | 66 ++++++++++++++-----
 1 file changed, 51 insertions(+), 15 deletions(-)

diff --git a/llvm/projects/hpvm-tensor-rt/dnn_sources/include/utils.h b/llvm/projects/hpvm-tensor-rt/dnn_sources/include/utils.h
index 8976f7dc8f..1eb32c2df8 100644
--- a/llvm/projects/hpvm-tensor-rt/dnn_sources/include/utils.h
+++ b/llvm/projects/hpvm-tensor-rt/dnn_sources/include/utils.h
@@ -518,40 +518,75 @@ void computeAccuracy(const char* labels_file, int num_labels, void* result_ptr){
 
 
 
-float computeAccuracy2(uint8_t* labels, int num_labels,
-		       void* result_ptr, unsigned num_classes = 10){
+// NOTE: batch_size and num_classes are Unused arguments 
+float computeAccuracy2(uint8_t* labels, int batch_size,
+		       void* result_ptr, size_t num_classes = 10){
 
-  unsigned num_zeros = 0;
+  struct Tensor* result = (struct Tensor*) result_ptr;
+  
+  size_t batch_dim = result->dims.dim_sizes[0];
+  num_classes = result->dims.dim_sizes[1];
+  float* data = (float*) result->host_data;
+  int num_errors = 0;
+
+  printf("batch_dim = %lu, channels = %lu \n", batch_dim, num_classes);
+  
+  for(unsigned int i = 0; i < batch_dim; i++){ 
+      
+    int chosen = 0;
+    for (int id = 1; id < num_classes; ++id){
+      if (data[i * num_classes + chosen] < data[i * num_classes + id]) chosen = id;
+    }
+    
+    if(chosen != labels[i])
+      num_errors++;
+
+  }
+
+  float accuracy = ((batch_dim - num_errors) * 1.0 / batch_dim * 1.0) * 100.0;
+  printf("****** Accuracy = %f \n\n", accuracy);
+
+  FILE* fp = fopen("final_accuracy", "w+");
+  if(fp != NULL){
+
+    std::ostringstream ss;
+    ss << std::fixed << accuracy;
+    std::string print_str = ss.str();
+  
+    fwrite(print_str.c_str(), 1, print_str.length(), fp);
+  }
+
+  fclose(fp);
+
+  return accuracy;    
+}
+
+
+
+float computeAccuracy3(uint32_t* labels, void* result_ptr){
   
   struct Tensor* result = (struct Tensor*) result_ptr;
   
   size_t batch_dim = result->dims.dim_sizes[0];
-  size_t channels = result->dims.dim_sizes[1];
+  size_t num_classes = result->dims.dim_sizes[1];
   float* data = (float*) result->host_data;
   int num_errors = 0;
 
-  printf("batch_dim = %lu, channels = %lu \n", batch_dim, channels);
+  printf("batch_dim = %lu, num_classes = %lu \n", batch_dim, num_classes);
   
-  for(int i = 0; i < num_labels; i++){
+  for(int i = 0; i < batch_dim; i++){
   
     int chosen = 0;
-    //for (int id = 1; id < num_classes; ++id){
-    for (int id = 1; id < channels; ++id){
-      if (data[i * channels + chosen] < data[i * channels + id]) chosen = id;
+    for (int id = 1; id < num_classes; ++id){
+      if (data[i * num_classes + chosen] < data[i * num_classes + id]) chosen = id;
     }
     
-    if(labels[i] == 0)
-      num_zeros++;
-      
     if(chosen != labels[i])
       num_errors++;
-
-    //printf("chosen = %d, label = %d \n", chosen, labels[i]);
   }
 
   float accuracy = ((batch_dim - num_errors) * 1.0 / batch_dim * 1.0) * 100.0;
   printf("****** Accuracy = %f \n\n", accuracy);
-  //printf("****** Zero class labels %d \n", num_zeros);
 
   FILE* fp = fopen("final_accuracy", "w+");
   if(fp != NULL){
@@ -569,6 +604,7 @@ float computeAccuracy2(uint8_t* labels, int num_labels,
 }
 
 
+
 struct ClassProb{
   float prob;
   int index;
-- 
GitLab