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