From e9d84a92071a0097a4e77561999e3f79ad32b009 Mon Sep 17 00:00:00 2001 From: Jihoon Lee Date: Thu, 8 Oct 2020 16:24:44 +0900 Subject: [PATCH] [CS] Add cutoff logic through accuracy **Changes proposed in this PR:** - Add more epochs - Add cutoff logic to check if the guess is confident **Self evaluation:** 1. Build test: [X]Passed [ ]Failed [ ]Skipped 2. Run test: [X]Passed [ ]Failed [ ]Skipped Signed-off-by: Jihoon Lee --- Applications/Tizen_native/CustomShortcut/inc/data.h | 7 +++++++ Applications/Tizen_native/CustomShortcut/res/model.ini | 2 +- Applications/Tizen_native/CustomShortcut/src/data.c | 8 +++++--- Applications/Tizen_native/CustomShortcut/src/view.c | 12 +++++++++--- 4 files changed, 22 insertions(+), 7 deletions(-) diff --git a/Applications/Tizen_native/CustomShortcut/inc/data.h b/Applications/Tizen_native/CustomShortcut/inc/data.h index 6079e27..c6b8f73 100644 --- a/Applications/Tizen_native/CustomShortcut/inc/data.h +++ b/Applications/Tizen_native/CustomShortcut/inc/data.h @@ -38,6 +38,12 @@ #define FEATURE_SIZE 62720 #define NUM_CLASS 2 +#define CUT_OFF_THRESHOLD 0.85 + +#define EMOJI_SAD "😢" +#define EMOJI_SMILE "😊" +#define EMOJI_UNKNOWN "❓" + typedef enum MODE_ { MODE_INFER = 0, MODE_TRAIN, @@ -80,6 +86,7 @@ typedef struct appdata { char pipe_dst[PATH_MAX]; /**< destination path where to save */ pthread_mutex_t pipe_lock; /**< ensures that only one pipe runs at a time */ pthread_cond_t pipe_cond; /**< pipe condition to block at a point */ + float probability; /**< softmax label result of the inference */ /**< Training related */ pthread_t tid_writer; /**< thread handler to run trainer */ diff --git a/Applications/Tizen_native/CustomShortcut/res/model.ini b/Applications/Tizen_native/CustomShortcut/res/model.ini index 995e101..c069d7d 100644 --- a/Applications/Tizen_native/CustomShortcut/res/model.ini +++ b/Applications/Tizen_native/CustomShortcut/res/model.ini @@ -4,7 +4,7 @@ Type = NeuralNetwork # Model Type : Regression, KNN, NeuralNetwork Learning_rate = 0.0001 # Learning Rate Decay_rate = 0.96 # for the decay_rate for the decayed learning rate Decay_steps = 1000 # decay step for the exponential decayed learning rate -Epochs = 30 # Epoch +Epochs = 40 # Epoch Optimizer = adam # Optimizer : sgd (stochastic gradien decent), # adam (Adamtive Moment Estimation) loss = cross # Cost(loss) function : mse (mean squared error) diff --git a/Applications/Tizen_native/CustomShortcut/src/data.c b/Applications/Tizen_native/CustomShortcut/src/data.c index bd3eed6..6f9fa01 100644 --- a/Applications/Tizen_native/CustomShortcut/src/data.c +++ b/Applications/Tizen_native/CustomShortcut/src/data.c @@ -165,13 +165,13 @@ int util_get_emoji(LABEL label, char **emoji_str) { /// setting draw label and text switch (label) { case LABEL_UNSET: - strcpy(*emoji_str, "❓"); + strcpy(*emoji_str, EMOJI_UNKNOWN); return APP_ERROR_NONE; case LABEL_SMILE: - strcpy(*emoji_str, "😊"); + strcpy(*emoji_str, EMOJI_SMILE); return APP_ERROR_NONE; case LABEL_FROWN: - strcpy(*emoji_str, "😢"); + strcpy(*emoji_str, EMOJI_SAD); return APP_ERROR_NONE; default: LOG_E("unreachable code"); @@ -599,6 +599,8 @@ static void on_inference_end_(ml_tensors_data_h data, /// SMILE: 0 1 /// FROWN: 1 0 LOG_D("\033[33mlabel: %lf %lf\033[0m", raw_data[0], raw_data[1]); + + ad->probability = raw_data[0] < raw_data[1] ? raw_data[1] : raw_data[0]; ad->label = raw_data[0] < raw_data[1] ? LABEL_SMILE : LABEL_FROWN; RESUME: diff --git a/Applications/Tizen_native/CustomShortcut/src/view.c b/Applications/Tizen_native/CustomShortcut/src/view.c index 09018d5..0e063db 100644 --- a/Applications/Tizen_native/CustomShortcut/src/view.c +++ b/Applications/Tizen_native/CustomShortcut/src/view.c @@ -353,6 +353,8 @@ void *view_update_train_progress(void *data) { void view_update_guess(void *data) { appdata_s *ad = (appdata_s *)data; char *emoji; + char title[PATH_MAX]; + char result[PATH_MAX]; int status = util_get_emoji(ad->label, &emoji); if (status != APP_ERROR_NONE) { LOG_E("error getting emoji, reason: %d", status); @@ -360,12 +362,16 @@ void view_update_guess(void *data) { } LOG_I("\033[33m%s\033[0m", emoji); - elm_object_part_text_set(ad->layout, "test_result/title", - "guess successfully done"); + snprintf(title, PATH_MAX, "acc: %lf", ad->probability); + elm_object_part_text_set(ad->layout, "test_result/title", title); + elm_config_font_overlay_set("test_result/label/class", "Tizen:style=Regular", -150); elm_config_font_overlay_apply(); - elm_object_part_text_set(ad->layout, "test_result/label", emoji); + + snprintf(result, PATH_MAX, "%s%s", emoji, + ad->probability < CUT_OFF_THRESHOLD ? "?" : ""); + elm_object_part_text_set(ad->layout, "test_result/label", result); free(emoji); return; -- 2.7.4