From: hyeonseok lee Date: Fri, 21 Apr 2023 05:00:54 +0000 (+0900) Subject: [UTC][nntrainer][ACR-1758] Added new TCs for new lr scheduler and get weight API X-Git-Url: http://review.tizen.org/git/?a=commitdiff_plain;h=531eaad30f5f2972d32dfd618558e60ab628b3d4;p=test%2Ftct%2Fnative%2Fapi.git [UTC][nntrainer][ACR-1758] Added new TCs for new lr scheduler and get weight API - Added learning rate scheduler related API TC - Added get weight from model API TC Change-Id: I4ca409129e146e7ff5082a9e9e5c47921244a590 Signed-off-by: hyeonseok lee --- diff --git a/src/utc/nntrainer/CMakeLists.txt b/src/utc/nntrainer/CMakeLists.txt index 3c7ef3ed0..7baa618a0 100644 --- a/src/utc/nntrainer/CMakeLists.txt +++ b/src/utc/nntrainer/CMakeLists.txt @@ -7,6 +7,7 @@ SET(CAPI_LIB "nntrainer") SET(TC_SOURCES utc-nntrainer-dataset.c utc-nntrainer-layer.c + utc-nntrainer-lr-scheduler.c utc-nntrainer-optimizer.c utc-nntrainer-model.c ) diff --git a/src/utc/nntrainer/public.list b/src/utc/nntrainer/public.list index b1f804afa..f1ee403d1 100644 --- a/src/utc/nntrainer/public.list +++ b/src/utc/nntrainer/public.list @@ -9,15 +9,25 @@ ml_train_model_set_optimizer ml_train_model_set_dataset ml_train_model_get_input_tensors_info ml_train_model_get_output_tensors_info -ml_train_model_save -ml_train_model_load ml_train_layer_create -ml_train_layer_set_property ml_train_layer_destroy +ml_train_layer_set_property ml_train_optimizer_create -ml_train_optimizer_set_property ml_train_optimizer_destroy +ml_train_optimizer_set_property +ml_train_optimizer_set_lr_scheduler +ml_train_lr_scheduler_create +ml_train_lr_scheduler_destroy +ml_train_lr_scheduler_set_property ml_train_dataset_create_with_generator +ml_train_dataset_create +ml_train_dataset_add_generator +ml_train_dataset_add_file ml_train_dataset_create_with_file -ml_train_dataset_set_property ml_train_dataset_destroy +ml_train_dataset_set_property +ml_train_dataset_set_property_for_mode +ml_train_model_save +ml_train_model_load +ml_train_model_get_layer +ml_train_model_get_weight diff --git a/src/utc/nntrainer/tct-nntrainer-core_mobile.h b/src/utc/nntrainer/tct-nntrainer-core_mobile.h index c0c5f4915..fd27af4ce 100644 --- a/src/utc/nntrainer/tct-nntrainer-core_mobile.h +++ b/src/utc/nntrainer/tct-nntrainer-core_mobile.h @@ -38,6 +38,9 @@ extern int utc_nntrainer_optimizer_destroy_p(void); extern int utc_nntrainer_optimizer_destroy_n(void); extern int utc_nntrainer_optimizer_set_property_p(void); extern int utc_nntrainer_optimizer_set_property_n(void); +extern int utc_nntrainer_optimizer_set_lr_scheduler_p(void); +extern int utc_nntrainer_optimizer_set_lr_scheduler_n1(void); +extern int utc_nntrainer_optimizer_set_lr_scheduler_n2(void); extern void utc_nntrainer_dataset_startup(void); extern void utc_nntrainer_dataset_cleanup(void); @@ -76,6 +79,9 @@ extern int utc_nntrainer_model_compile_n(void); extern int utc_nntrainer_model_run_p1(void); extern int utc_nntrainer_model_run_p2(void); extern int utc_nntrainer_model_run_n(void); +extern int utc_nntrainer_model_get_weight_p(void); +extern int utc_nntrainer_model_get_weight_n(void); + /// since tizen 6.5 extern int utc_nntrainer_layer_create_p2(void); extern int utc_nntrainer_layer_set_property_bn_p(void); @@ -173,6 +179,17 @@ extern int utc_nntrainer_dataset_add_file_test_dataset_n2(void); extern int utc_nntrainer_dataset_set_property_for_mode_p(void); extern int utc_nntrainer_dataset_set_property_for_mode_n(void); +/// since tizen 7.5 +extern void utc_nntrainer_lr_scheduler_startup(void); +extern void utc_nntrainer_lr_scheduler_cleanup(void); + +extern int utc_nntrainer_lr_scheduler_create_p(void); +extern int utc_nntrainer_lr_scheduler_create_n(void); +extern int utc_nntrainer_lr_scheduler_destroy_p(void); +extern int utc_nntrainer_lr_scheduler_destroy_n(void); +extern int utc_nntrainer_lr_scheduler_set_property_p(void); +extern int utc_nntrainer_lr_scheduler_set_property_n(void); + testcase tc_array[] = { // layer tcs {"utc_nntrainer_layer_create_p", utc_nntrainer_layer_create_p, utc_nntrainer_layer_startup, utc_nntrainer_layer_cleanup}, @@ -188,6 +205,9 @@ testcase tc_array[] = { {"utc_nntrainer_optimizer_destroy_n", utc_nntrainer_optimizer_destroy_n, utc_nntrainer_optimizer_startup, utc_nntrainer_optimizer_cleanup}, {"utc_nntrainer_optimizer_set_property_p", utc_nntrainer_optimizer_set_property_p, utc_nntrainer_optimizer_startup, utc_nntrainer_optimizer_cleanup}, {"utc_nntrainer_optimizer_set_property_n", utc_nntrainer_optimizer_set_property_n, utc_nntrainer_optimizer_startup, utc_nntrainer_optimizer_cleanup}, + {"utc_nntrainer_optimizer_set_lr_scheduler_p", utc_nntrainer_optimizer_set_lr_scheduler_p, utc_nntrainer_optimizer_startup, utc_nntrainer_optimizer_cleanup}, + {"utc_nntrainer_optimizer_set_lr_scheduler_n1", utc_nntrainer_optimizer_set_lr_scheduler_n1, utc_nntrainer_optimizer_startup, utc_nntrainer_optimizer_cleanup}, + {"utc_nntrainer_optimizer_set_lr_scheduler_n2", utc_nntrainer_optimizer_set_lr_scheduler_n2, utc_nntrainer_optimizer_startup, utc_nntrainer_optimizer_cleanup}, // dataset tcs {"utc_nntrainer_dataset_create_file_p", utc_nntrainer_dataset_create_file_p, utc_nntrainer_dataset_startup, utc_nntrainer_dataset_cleanup}, {"utc_nntrainer_dataset_create_file_n", utc_nntrainer_dataset_create_file_n, utc_nntrainer_dataset_startup, utc_nntrainer_dataset_cleanup}, @@ -220,6 +240,8 @@ testcase tc_array[] = { {"utc_nntrainer_model_run_p1", utc_nntrainer_model_run_p1, utc_nntrainer_model_startup, utc_nntrainer_model_cleanup}, {"utc_nntrainer_model_run_p2", utc_nntrainer_model_run_p2, utc_nntrainer_model_startup, utc_nntrainer_model_cleanup}, {"utc_nntrainer_model_run_n", utc_nntrainer_model_run_n, utc_nntrainer_model_startup, utc_nntrainer_model_cleanup}, + {"utc_nntrainer_model_get_weight_p", utc_nntrainer_model_get_weight_p, utc_nntrainer_model_startup, utc_nntrainer_model_cleanup}, + {"utc_nntrainer_model_get_weight_n", utc_nntrainer_model_get_weight_n, utc_nntrainer_model_startup, utc_nntrainer_model_cleanup}, /// since tizen 6.5 {"utc_nntrainer_layer_create_p2", utc_nntrainer_layer_create_p2, utc_nntrainer_layer_startup, utc_nntrainer_layer_cleanup}, @@ -318,6 +340,14 @@ testcase tc_array[] = { {"utc_nntrainer_dataset_set_property_for_mode_p", utc_nntrainer_dataset_set_property_for_mode_p, utc_nntrainer_dataset_startup, utc_nntrainer_dataset_cleanup}, {"utc_nntrainer_dataset_set_property_for_mode_n", utc_nntrainer_dataset_set_property_for_mode_n, utc_nntrainer_dataset_startup, utc_nntrainer_dataset_cleanup}, + // lr_scheduler tcs + {"utc_nntrainer_lr_scheduler_create_p", utc_nntrainer_lr_scheduler_create_p, utc_nntrainer_lr_scheduler_startup, utc_nntrainer_lr_scheduler_cleanup}, + {"utc_nntrainer_lr_scheduler_create_n", utc_nntrainer_lr_scheduler_create_n, utc_nntrainer_lr_scheduler_startup, utc_nntrainer_lr_scheduler_cleanup}, + {"utc_nntrainer_lr_scheduler_destroy_p", utc_nntrainer_lr_scheduler_destroy_p, utc_nntrainer_lr_scheduler_startup, utc_nntrainer_lr_scheduler_cleanup}, + {"utc_nntrainer_lr_scheduler_destroy_n", utc_nntrainer_lr_scheduler_destroy_n, utc_nntrainer_lr_scheduler_startup, utc_nntrainer_lr_scheduler_cleanup}, + {"utc_nntrainer_lr_scheduler_set_property_p", utc_nntrainer_lr_scheduler_set_property_p, utc_nntrainer_lr_scheduler_startup, utc_nntrainer_lr_scheduler_cleanup}, + {"utc_nntrainer_lr_scheduler_set_property_n", utc_nntrainer_lr_scheduler_set_property_n, utc_nntrainer_lr_scheduler_startup, utc_nntrainer_lr_scheduler_cleanup}, + {NULL, NULL}, }; #endif // __TCT_NNTRAINER_MOBILE_H__ diff --git a/src/utc/nntrainer/tct-nntrainer-core_tizeniot.h b/src/utc/nntrainer/tct-nntrainer-core_tizeniot.h index c8e46476e..f68170b98 100644 --- a/src/utc/nntrainer/tct-nntrainer-core_tizeniot.h +++ b/src/utc/nntrainer/tct-nntrainer-core_tizeniot.h @@ -38,6 +38,9 @@ extern int utc_nntrainer_optimizer_destroy_p(void); extern int utc_nntrainer_optimizer_destroy_n(void); extern int utc_nntrainer_optimizer_set_property_p(void); extern int utc_nntrainer_optimizer_set_property_n(void); +extern int utc_nntrainer_optimizer_set_lr_scheduler_p(void); +extern int utc_nntrainer_optimizer_set_lr_scheduler_n1(void); +extern int utc_nntrainer_optimizer_set_lr_scheduler_n2(void); extern void utc_nntrainer_dataset_startup(void); extern void utc_nntrainer_dataset_cleanup(void); @@ -76,6 +79,8 @@ extern int utc_nntrainer_model_compile_n(void); extern int utc_nntrainer_model_run_p1(void); extern int utc_nntrainer_model_run_p2(void); extern int utc_nntrainer_model_run_n(void); +extern int utc_nntrainer_model_get_weight_p(void); +extern int utc_nntrainer_model_get_weight_n(void); /// since tizen 6.5 extern int utc_nntrainer_layer_create_p2(void); @@ -174,6 +179,17 @@ extern int utc_nntrainer_dataset_add_file_test_dataset_n2(void); extern int utc_nntrainer_dataset_set_property_for_mode_p(void); extern int utc_nntrainer_dataset_set_property_for_mode_n(void); +/// since tizen 7.5 +extern void utc_nntrainer_lr_scheduler_startup(void); +extern void utc_nntrainer_lr_scheduler_cleanup(void); + +extern int utc_nntrainer_lr_scheduler_create_p(void); +extern int utc_nntrainer_lr_scheduler_create_n(void); +extern int utc_nntrainer_lr_scheduler_destroy_p(void); +extern int utc_nntrainer_lr_scheduler_destroy_n(void); +extern int utc_nntrainer_lr_scheduler_set_property_p(void); +extern int utc_nntrainer_lr_scheduler_set_property_n(void); + testcase tc_array[] = { // layer tcs {"utc_nntrainer_layer_create_p", utc_nntrainer_layer_create_p, utc_nntrainer_layer_startup, utc_nntrainer_layer_cleanup}, @@ -189,6 +205,9 @@ testcase tc_array[] = { {"utc_nntrainer_optimizer_destroy_n", utc_nntrainer_optimizer_destroy_n, utc_nntrainer_optimizer_startup, utc_nntrainer_optimizer_cleanup}, {"utc_nntrainer_optimizer_set_property_p", utc_nntrainer_optimizer_set_property_p, utc_nntrainer_optimizer_startup, utc_nntrainer_optimizer_cleanup}, {"utc_nntrainer_optimizer_set_property_n", utc_nntrainer_optimizer_set_property_n, utc_nntrainer_optimizer_startup, utc_nntrainer_optimizer_cleanup}, + {"utc_nntrainer_optimizer_set_lr_scheduler_p", utc_nntrainer_optimizer_set_lr_scheduler_p, utc_nntrainer_optimizer_startup, utc_nntrainer_optimizer_cleanup}, + {"utc_nntrainer_optimizer_set_lr_scheduler_n1", utc_nntrainer_optimizer_set_lr_scheduler_n1, utc_nntrainer_optimizer_startup, utc_nntrainer_optimizer_cleanup}, + {"utc_nntrainer_optimizer_set_lr_scheduler_n2", utc_nntrainer_optimizer_set_lr_scheduler_n2, utc_nntrainer_optimizer_startup, utc_nntrainer_optimizer_cleanup}, // dataset tcs {"utc_nntrainer_dataset_create_file_p", utc_nntrainer_dataset_create_file_p, utc_nntrainer_dataset_startup, utc_nntrainer_dataset_cleanup}, {"utc_nntrainer_dataset_create_file_n", utc_nntrainer_dataset_create_file_n, utc_nntrainer_dataset_startup, utc_nntrainer_dataset_cleanup}, @@ -221,6 +240,8 @@ testcase tc_array[] = { {"utc_nntrainer_model_run_p1", utc_nntrainer_model_run_p1, utc_nntrainer_model_startup, utc_nntrainer_model_cleanup}, {"utc_nntrainer_model_run_p2", utc_nntrainer_model_run_p2, utc_nntrainer_model_startup, utc_nntrainer_model_cleanup}, {"utc_nntrainer_model_run_n", utc_nntrainer_model_run_n, utc_nntrainer_model_startup, utc_nntrainer_model_cleanup}, + {"utc_nntrainer_model_get_weight_p", utc_nntrainer_model_get_weight_p, utc_nntrainer_model_startup, utc_nntrainer_model_cleanup}, + {"utc_nntrainer_model_get_weight_n", utc_nntrainer_model_get_weight_n, utc_nntrainer_model_startup, utc_nntrainer_model_cleanup}, /// since tizen 6.5 {"utc_nntrainer_layer_create_p2", utc_nntrainer_layer_create_p2, utc_nntrainer_layer_startup, utc_nntrainer_layer_cleanup}, @@ -319,6 +340,14 @@ testcase tc_array[] = { {"utc_nntrainer_dataset_set_property_for_mode_p", utc_nntrainer_dataset_set_property_for_mode_p, utc_nntrainer_dataset_startup, utc_nntrainer_dataset_cleanup}, {"utc_nntrainer_dataset_set_property_for_mode_n", utc_nntrainer_dataset_set_property_for_mode_n, utc_nntrainer_dataset_startup, utc_nntrainer_dataset_cleanup}, + // lr_scheduler tcs + {"utc_nntrainer_lr_scheduler_create_p", utc_nntrainer_lr_scheduler_create_p, utc_nntrainer_lr_scheduler_startup, utc_nntrainer_lr_scheduler_cleanup}, + {"utc_nntrainer_lr_scheduler_create_n", utc_nntrainer_lr_scheduler_create_n, utc_nntrainer_lr_scheduler_startup, utc_nntrainer_lr_scheduler_cleanup}, + {"utc_nntrainer_lr_scheduler_destroy_p", utc_nntrainer_lr_scheduler_destroy_p, utc_nntrainer_lr_scheduler_startup, utc_nntrainer_lr_scheduler_cleanup}, + {"utc_nntrainer_lr_scheduler_destroy_n", utc_nntrainer_lr_scheduler_destroy_n, utc_nntrainer_lr_scheduler_startup, utc_nntrainer_lr_scheduler_cleanup}, + {"utc_nntrainer_lr_scheduler_set_property_p", utc_nntrainer_lr_scheduler_set_property_p, utc_nntrainer_lr_scheduler_startup, utc_nntrainer_lr_scheduler_cleanup}, + {"utc_nntrainer_lr_scheduler_set_property_n", utc_nntrainer_lr_scheduler_set_property_n, utc_nntrainer_lr_scheduler_startup, utc_nntrainer_lr_scheduler_cleanup}, + {NULL, NULL}, }; #endif // __TCT_NNTRAINER_IOT_H__ diff --git a/src/utc/nntrainer/tct-nntrainer-core_tv.h b/src/utc/nntrainer/tct-nntrainer-core_tv.h index ed6b80ea0..a05805ee6 100644 --- a/src/utc/nntrainer/tct-nntrainer-core_tv.h +++ b/src/utc/nntrainer/tct-nntrainer-core_tv.h @@ -38,6 +38,9 @@ extern int utc_nntrainer_optimizer_destroy_p(void); extern int utc_nntrainer_optimizer_destroy_n(void); extern int utc_nntrainer_optimizer_set_property_p(void); extern int utc_nntrainer_optimizer_set_property_n(void); +extern int utc_nntrainer_optimizer_set_lr_scheduler_p(void); +extern int utc_nntrainer_optimizer_set_lr_scheduler_n1(void); +extern int utc_nntrainer_optimizer_set_lr_scheduler_n2(void); extern void utc_nntrainer_dataset_startup(void); extern void utc_nntrainer_dataset_cleanup(void); @@ -76,6 +79,8 @@ extern int utc_nntrainer_model_compile_n(void); extern int utc_nntrainer_model_run_p1(void); extern int utc_nntrainer_model_run_p2(void); extern int utc_nntrainer_model_run_n(void); +extern int utc_nntrainer_model_get_weight_p(void); +extern int utc_nntrainer_model_get_weight_n(void); /// since tizen 6.5 extern int utc_nntrainer_layer_create_p2(void); @@ -174,6 +179,17 @@ extern int utc_nntrainer_dataset_add_file_test_dataset_n2(void); extern int utc_nntrainer_dataset_set_property_for_mode_p(void); extern int utc_nntrainer_dataset_set_property_for_mode_n(void); +/// since tizen 7.5 +extern void utc_nntrainer_lr_scheduler_startup(void); +extern void utc_nntrainer_lr_scheduler_cleanup(void); + +extern int utc_nntrainer_lr_scheduler_create_p(void); +extern int utc_nntrainer_lr_scheduler_create_n(void); +extern int utc_nntrainer_lr_scheduler_destroy_p(void); +extern int utc_nntrainer_lr_scheduler_destroy_n(void); +extern int utc_nntrainer_lr_scheduler_set_property_p(void); +extern int utc_nntrainer_lr_scheduler_set_property_n(void); + testcase tc_array[] = { // layer tcs {"utc_nntrainer_layer_create_p", utc_nntrainer_layer_create_p, utc_nntrainer_layer_startup, utc_nntrainer_layer_cleanup}, @@ -189,6 +205,9 @@ testcase tc_array[] = { {"utc_nntrainer_optimizer_destroy_n", utc_nntrainer_optimizer_destroy_n, utc_nntrainer_optimizer_startup, utc_nntrainer_optimizer_cleanup}, {"utc_nntrainer_optimizer_set_property_p", utc_nntrainer_optimizer_set_property_p, utc_nntrainer_optimizer_startup, utc_nntrainer_optimizer_cleanup}, {"utc_nntrainer_optimizer_set_property_n", utc_nntrainer_optimizer_set_property_n, utc_nntrainer_optimizer_startup, utc_nntrainer_optimizer_cleanup}, + {"utc_nntrainer_optimizer_set_lr_scheduler_p", utc_nntrainer_optimizer_set_lr_scheduler_p, utc_nntrainer_optimizer_startup, utc_nntrainer_optimizer_cleanup}, + {"utc_nntrainer_optimizer_set_lr_scheduler_n1", utc_nntrainer_optimizer_set_lr_scheduler_n1, utc_nntrainer_optimizer_startup, utc_nntrainer_optimizer_cleanup}, + {"utc_nntrainer_optimizer_set_lr_scheduler_n2", utc_nntrainer_optimizer_set_lr_scheduler_n2, utc_nntrainer_optimizer_startup, utc_nntrainer_optimizer_cleanup}, // dataset tcs {"utc_nntrainer_dataset_create_file_p", utc_nntrainer_dataset_create_file_p, utc_nntrainer_dataset_startup, utc_nntrainer_dataset_cleanup}, {"utc_nntrainer_dataset_create_file_n", utc_nntrainer_dataset_create_file_n, utc_nntrainer_dataset_startup, utc_nntrainer_dataset_cleanup}, @@ -221,6 +240,8 @@ testcase tc_array[] = { {"utc_nntrainer_model_run_p1", utc_nntrainer_model_run_p1, utc_nntrainer_model_startup, utc_nntrainer_model_cleanup}, {"utc_nntrainer_model_run_p2", utc_nntrainer_model_run_p2, utc_nntrainer_model_startup, utc_nntrainer_model_cleanup}, {"utc_nntrainer_model_run_n", utc_nntrainer_model_run_n, utc_nntrainer_model_startup, utc_nntrainer_model_cleanup}, + {"utc_nntrainer_model_get_weight_p", utc_nntrainer_model_get_weight_p, utc_nntrainer_model_startup, utc_nntrainer_model_cleanup}, + {"utc_nntrainer_model_get_weight_n", utc_nntrainer_model_get_weight_n, utc_nntrainer_model_startup, utc_nntrainer_model_cleanup}, /// since tizen 6.5 {"utc_nntrainer_layer_create_p2", utc_nntrainer_layer_create_p2, utc_nntrainer_layer_startup, utc_nntrainer_layer_cleanup}, @@ -319,6 +340,14 @@ testcase tc_array[] = { {"utc_nntrainer_dataset_set_property_for_mode_p", utc_nntrainer_dataset_set_property_for_mode_p, utc_nntrainer_dataset_startup, utc_nntrainer_dataset_cleanup}, {"utc_nntrainer_dataset_set_property_for_mode_n", utc_nntrainer_dataset_set_property_for_mode_n, utc_nntrainer_dataset_startup, utc_nntrainer_dataset_cleanup}, + // lr_scheduler tcs + {"utc_nntrainer_lr_scheduler_create_p", utc_nntrainer_lr_scheduler_create_p, utc_nntrainer_lr_scheduler_startup, utc_nntrainer_lr_scheduler_cleanup}, + {"utc_nntrainer_lr_scheduler_create_n", utc_nntrainer_lr_scheduler_create_n, utc_nntrainer_lr_scheduler_startup, utc_nntrainer_lr_scheduler_cleanup}, + {"utc_nntrainer_lr_scheduler_destroy_p", utc_nntrainer_lr_scheduler_destroy_p, utc_nntrainer_lr_scheduler_startup, utc_nntrainer_lr_scheduler_cleanup}, + {"utc_nntrainer_lr_scheduler_destroy_n", utc_nntrainer_lr_scheduler_destroy_n, utc_nntrainer_lr_scheduler_startup, utc_nntrainer_lr_scheduler_cleanup}, + {"utc_nntrainer_lr_scheduler_set_property_p", utc_nntrainer_lr_scheduler_set_property_p, utc_nntrainer_lr_scheduler_startup, utc_nntrainer_lr_scheduler_cleanup}, + {"utc_nntrainer_lr_scheduler_set_property_n", utc_nntrainer_lr_scheduler_set_property_n, utc_nntrainer_lr_scheduler_startup, utc_nntrainer_lr_scheduler_cleanup}, + {NULL, NULL}, }; diff --git a/src/utc/nntrainer/tct-nntrainer-core_wearable.h b/src/utc/nntrainer/tct-nntrainer-core_wearable.h index 8a1550e2f..4952440b3 100644 --- a/src/utc/nntrainer/tct-nntrainer-core_wearable.h +++ b/src/utc/nntrainer/tct-nntrainer-core_wearable.h @@ -38,6 +38,9 @@ extern int utc_nntrainer_optimizer_destroy_p(void); extern int utc_nntrainer_optimizer_destroy_n(void); extern int utc_nntrainer_optimizer_set_property_p(void); extern int utc_nntrainer_optimizer_set_property_n(void); +extern int utc_nntrainer_optimizer_set_lr_scheduler_p(void); +extern int utc_nntrainer_optimizer_set_lr_scheduler_n1(void); +extern int utc_nntrainer_optimizer_set_lr_scheduler_n2(void); extern void utc_nntrainer_dataset_startup(void); extern void utc_nntrainer_dataset_cleanup(void); @@ -76,6 +79,8 @@ extern int utc_nntrainer_model_compile_n(void); extern int utc_nntrainer_model_run_p1(void); extern int utc_nntrainer_model_run_p2(void); extern int utc_nntrainer_model_run_n(void); +extern int utc_nntrainer_model_get_weight_p(void); +extern int utc_nntrainer_model_get_weight_n(void); /// since tizen 6.5 extern int utc_nntrainer_layer_create_p2(void); @@ -174,6 +179,17 @@ extern int utc_nntrainer_dataset_add_file_test_dataset_n2(void); extern int utc_nntrainer_dataset_set_property_for_mode_p(void); extern int utc_nntrainer_dataset_set_property_for_mode_n(void); +/// since tizen 7.5 +extern void utc_nntrainer_lr_scheduler_startup(void); +extern void utc_nntrainer_lr_scheduler_cleanup(void); + +extern int utc_nntrainer_lr_scheduler_create_p(void); +extern int utc_nntrainer_lr_scheduler_create_n(void); +extern int utc_nntrainer_lr_scheduler_destroy_p(void); +extern int utc_nntrainer_lr_scheduler_destroy_n(void); +extern int utc_nntrainer_lr_scheduler_set_property_p(void); +extern int utc_nntrainer_lr_scheduler_set_property_n(void); + testcase tc_array[] = { // layer tcs {"utc_nntrainer_layer_create_p", utc_nntrainer_layer_create_p, utc_nntrainer_layer_startup, utc_nntrainer_layer_cleanup}, @@ -189,6 +205,9 @@ testcase tc_array[] = { {"utc_nntrainer_optimizer_destroy_n", utc_nntrainer_optimizer_destroy_n, utc_nntrainer_optimizer_startup, utc_nntrainer_optimizer_cleanup}, {"utc_nntrainer_optimizer_set_property_p", utc_nntrainer_optimizer_set_property_p, utc_nntrainer_optimizer_startup, utc_nntrainer_optimizer_cleanup}, {"utc_nntrainer_optimizer_set_property_n", utc_nntrainer_optimizer_set_property_n, utc_nntrainer_optimizer_startup, utc_nntrainer_optimizer_cleanup}, + {"utc_nntrainer_optimizer_set_lr_scheduler_p", utc_nntrainer_optimizer_set_lr_scheduler_p, utc_nntrainer_optimizer_startup, utc_nntrainer_optimizer_cleanup}, + {"utc_nntrainer_optimizer_set_lr_scheduler_n1", utc_nntrainer_optimizer_set_lr_scheduler_n1, utc_nntrainer_optimizer_startup, utc_nntrainer_optimizer_cleanup}, + {"utc_nntrainer_optimizer_set_lr_scheduler_n2", utc_nntrainer_optimizer_set_lr_scheduler_n2, utc_nntrainer_optimizer_startup, utc_nntrainer_optimizer_cleanup}, // dataset tcs {"utc_nntrainer_dataset_create_file_p", utc_nntrainer_dataset_create_file_p, utc_nntrainer_dataset_startup, utc_nntrainer_dataset_cleanup}, {"utc_nntrainer_dataset_create_file_n", utc_nntrainer_dataset_create_file_n, utc_nntrainer_dataset_startup, utc_nntrainer_dataset_cleanup}, @@ -221,6 +240,8 @@ testcase tc_array[] = { {"utc_nntrainer_model_run_p1", utc_nntrainer_model_run_p1, utc_nntrainer_model_startup, utc_nntrainer_model_cleanup}, {"utc_nntrainer_model_run_p2", utc_nntrainer_model_run_p2, utc_nntrainer_model_startup, utc_nntrainer_model_cleanup}, {"utc_nntrainer_model_run_n", utc_nntrainer_model_run_n, utc_nntrainer_model_startup, utc_nntrainer_model_cleanup}, + {"utc_nntrainer_model_get_weight_p", utc_nntrainer_model_get_weight_p, utc_nntrainer_model_startup, utc_nntrainer_model_cleanup}, + {"utc_nntrainer_model_get_weight_n", utc_nntrainer_model_get_weight_n, utc_nntrainer_model_startup, utc_nntrainer_model_cleanup}, /// since tizen 6.5 {"utc_nntrainer_layer_create_p2", utc_nntrainer_layer_create_p2, utc_nntrainer_layer_startup, utc_nntrainer_layer_cleanup}, @@ -319,6 +340,14 @@ testcase tc_array[] = { {"utc_nntrainer_dataset_set_property_for_mode_p", utc_nntrainer_dataset_set_property_for_mode_p, utc_nntrainer_dataset_startup, utc_nntrainer_dataset_cleanup}, {"utc_nntrainer_dataset_set_property_for_mode_n", utc_nntrainer_dataset_set_property_for_mode_n, utc_nntrainer_dataset_startup, utc_nntrainer_dataset_cleanup}, + // lr_scheduler tcs + {"utc_nntrainer_lr_scheduler_create_p", utc_nntrainer_lr_scheduler_create_p, utc_nntrainer_lr_scheduler_startup, utc_nntrainer_lr_scheduler_cleanup}, + {"utc_nntrainer_lr_scheduler_create_n", utc_nntrainer_lr_scheduler_create_n, utc_nntrainer_lr_scheduler_startup, utc_nntrainer_lr_scheduler_cleanup}, + {"utc_nntrainer_lr_scheduler_destroy_p", utc_nntrainer_lr_scheduler_destroy_p, utc_nntrainer_lr_scheduler_startup, utc_nntrainer_lr_scheduler_cleanup}, + {"utc_nntrainer_lr_scheduler_destroy_n", utc_nntrainer_lr_scheduler_destroy_n, utc_nntrainer_lr_scheduler_startup, utc_nntrainer_lr_scheduler_cleanup}, + {"utc_nntrainer_lr_scheduler_set_property_p", utc_nntrainer_lr_scheduler_set_property_p, utc_nntrainer_lr_scheduler_startup, utc_nntrainer_lr_scheduler_cleanup}, + {"utc_nntrainer_lr_scheduler_set_property_n", utc_nntrainer_lr_scheduler_set_property_n, utc_nntrainer_lr_scheduler_startup, utc_nntrainer_lr_scheduler_cleanup}, + {NULL, NULL}, }; diff --git a/src/utc/nntrainer/utc-nntrainer-lr-scheduler.c b/src/utc/nntrainer/utc-nntrainer-lr-scheduler.c new file mode 100644 index 000000000..24ea90c78 --- /dev/null +++ b/src/utc/nntrainer/utc-nntrainer-lr-scheduler.c @@ -0,0 +1,183 @@ +// +// Copyright (c) 2023 Samsung Electronics Co., Ltd. +// +// Licensed under the Apache License, Version 2.0 (the License); +// you may not use this file except in compliance with the License. +// You may obtain a copy of the License at +// +// http://www.apache.org/licenses/LICENSE-2.0 +// +// Unless required by applicable law or agreed to in writing, software +// distributed under the License is distributed on an "AS IS" BASIS, +// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +// See the License for the specific language governing permissions and +// limitations under the License. +// + +#include "utc-nntrainer-common.h" + +static int status; +static ml_train_lr_scheduler_h lr_scheduler; + +/** + * @function utc_nntrainer_lr_scheduler_startup + * @since_tizen 7.5 + * @description Called before each test case + */ +void utc_nntrainer_lr_scheduler_startup(void) +{ + int ret = SYSTEM_INFO_ERROR_NONE; + + ret = check_feature(); + if (ret != SYSTEM_INFO_ERROR_NONE) + { + LOG_I("startup failed because checking feature failed." + "Please note that tct can be run unexpectedly"); + return; + } +} + +/** + * @function utc_nntrainer_lr_scheduler_cleanup + * @since_tizen 7.5 + * @description Called after each test case + */ +void utc_nntrainer_lr_scheduler_cleanup(void) +{ + return; +} + +/** + * @function utc_nntrainer_lr_scheduler_create_p + * @since_tizen 7.5 + * @description create lr_scheduler test + */ +int utc_nntrainer_lr_scheduler_create_p(void) +{ + status = ml_train_lr_scheduler_create(&lr_scheduler, ML_TRAIN_LR_SCHEDULER_TYPE_CONSTANT); + if (train_supported == false) + { + assert_eq(status, ML_ERROR_NOT_SUPPORTED); + } + else + { + assert_eq(status, ML_ERROR_NONE); + } + + ml_train_lr_scheduler_destroy(lr_scheduler); + + return 0; +} + +/** + * @function utc_nntrainer_lr_scheduler_create_n + * @since_tizen 7.5 + * @description Test for creating unknown lr_scheduler + */ +int utc_nntrainer_lr_scheduler_create_n(void) +{ + status = ml_train_lr_scheduler_create(&lr_scheduler, ML_TRAIN_LR_SCHEDULER_TYPE_UNKNOWN); + if (train_supported == false) + { + assert_eq(status, ML_ERROR_NOT_SUPPORTED); + } + else + { + assert_eq(status, ML_ERROR_INVALID_PARAMETER); + } + + return 0; +} + +/** + * @function utc_nntrainer_lr_scheduler_destory_p + * @since_tizen 7.5 + * @description Test for destroying lr_scheduler + */ +int utc_nntrainer_lr_scheduler_destroy_p(void) +{ + ml_train_lr_scheduler_create(&lr_scheduler, ML_TRAIN_LR_SCHEDULER_TYPE_CONSTANT); + status = ml_train_lr_scheduler_destroy(lr_scheduler); + if (train_supported == false) + { + assert_eq(status, ML_ERROR_NOT_SUPPORTED); + } + else + { + assert_eq(status, ML_ERROR_NONE); + } + + return 0; +} + +/** + * @function utc_nntrainer_lr_scheduler_destroy_n + * @since_tizen 7.5 + * @description Test for destroying lr_scheduler that is passed to optimizer + */ +int utc_nntrainer_lr_scheduler_destroy_n(void) +{ + ml_train_optimizer_h optimizer; + ml_train_optimizer_create(&optimizer, ML_TRAIN_OPTIMIZER_TYPE_SGD); + ml_train_lr_scheduler_create(&lr_scheduler, ML_TRAIN_LR_SCHEDULER_TYPE_CONSTANT); + + ml_train_optimizer_set_lr_scheduler(optimizer, lr_scheduler); + + status = ml_train_lr_scheduler_destroy(lr_scheduler); + if (train_supported == false) + { + assert_eq(status, ML_ERROR_NOT_SUPPORTED); + } + else + { + assert_eq(status, ML_ERROR_INVALID_PARAMETER); + } + + ml_train_optimizer_destroy(optimizer); + + return 0; +} + +/** + * @function utc_nntrainer_lr_scheduler_set_property_p + * @since_tizen 7.5 + * @description Test for setting property + */ +int utc_nntrainer_lr_scheduler_set_property_p(void) +{ + ml_train_lr_scheduler_create(&lr_scheduler, ML_TRAIN_LR_SCHEDULER_TYPE_CONSTANT); + status = ml_train_lr_scheduler_set_property(lr_scheduler, "learning_rate=0.0001", NULL); + if (train_supported == false) + { + assert_eq(status, ML_ERROR_NOT_SUPPORTED); + } + else + { + assert_eq(status, ML_ERROR_NONE); + } + + ml_train_lr_scheduler_destroy(lr_scheduler); + return 0; +} + +/** + * @function utc_nntrainer_lr_scheduler_set_property_n + * @since_tizen 7.5 + * @description Test for setting invalid property + */ +int utc_nntrainer_lr_scheduler_set_property_n(void) +{ + ml_train_lr_scheduler_create(&lr_scheduler, ML_TRAIN_LR_SCHEDULER_TYPE_CONSTANT); + status = ml_train_lr_scheduler_set_property(lr_scheduler, "invalid_property_key=invalid_property_value", NULL); + if (train_supported == false) + { + assert_eq(status, ML_ERROR_NOT_SUPPORTED); + } + else + { + assert_eq(status, ML_ERROR_INVALID_PARAMETER); + } + ml_train_lr_scheduler_destroy(lr_scheduler); + + return 0; +} diff --git a/src/utc/nntrainer/utc-nntrainer-model.c b/src/utc/nntrainer/utc-nntrainer-model.c index 903591a8a..3e65ad40f 100644 --- a/src/utc/nntrainer/utc-nntrainer-model.c +++ b/src/utc/nntrainer/utc-nntrainer-model.c @@ -1167,3 +1167,63 @@ int utc_nntrainer_model_save_load_format_bin_n(void) return 0; } + +/** + * @function utc_nntrainer_model_get_weight_p + * @since_tizen 7.5 + * @description get weight from model + */ +int utc_nntrainer_model_get_weight_p(void) +{ + ml_train_model_h model; + ml_tensors_info_h weight_info; + ml_tensors_data_h weights; + ml_train_model_construct_with_conf(conf_path, &model); + + ml_train_model_compile(model, NULL); + + status = ml_train_model_get_weight(model, "outputlayer", &weights, &weight_info); + if (train_supported == false) + { + assert_eq(status, ML_ERROR_NOT_SUPPORTED); + } + else + { + assert_eq(status, ML_ERROR_NONE); + } + + ml_train_model_destroy(model); + ml_tensors_info_destroy(weight_info); + ml_tensors_data_destroy(weights); + + return 0; +} + +/** + * @function utc_nntrainer_model_get_weight_n + * @since_tizen 7.5 + * @description get weight from model + */ +int utc_nntrainer_model_get_weight_n(void) +{ + ml_train_model_h model; + ml_tensors_info_h weight_info; + ml_tensors_data_h weights; + ml_train_model_construct_with_conf(conf_path, &model); + + ml_train_model_compile(model, NULL); + + status = ml_train_model_get_weight(model, "unknownlayer", &weights, &weight_info); + if (train_supported == false) + { + assert_eq(status, ML_ERROR_NOT_SUPPORTED); + } + else + { + assert_eq(status, ML_ERROR_INVALID_PARAMETER); + } + + ml_train_model_destroy(model); + + return 0; +} diff --git a/src/utc/nntrainer/utc-nntrainer-optimizer.c b/src/utc/nntrainer/utc-nntrainer-optimizer.c index c76c9746f..a10c425f9 100644 --- a/src/utc/nntrainer/utc-nntrainer-optimizer.c +++ b/src/utc/nntrainer/utc-nntrainer-optimizer.c @@ -18,6 +18,7 @@ static int status; static ml_train_optimizer_h opt; +static ml_train_lr_scheduler_h lr_scheduler; /** * @function utc_nntrainer_optimizer_startup @@ -181,3 +182,76 @@ int utc_nntrainer_optimizer_set_property_n(void) return 0; } + +/** + * @function utc_nntrainer_optimizer_set_lr_scheduler_p + * @since_tizen 7.5 + * @description Test for set lr_scheduler + */ +int utc_nntrainer_optimizer_set_lr_scheduler_p(void) +{ + ml_train_optimizer_create(&opt, ML_TRAIN_OPTIMIZER_TYPE_SGD); + ml_train_lr_scheduler_create(&lr_scheduler, ML_TRAIN_LR_SCHEDULER_TYPE_CONSTANT); + status = ml_train_optimizer_set_lr_scheduler(opt, lr_scheduler); + if (train_supported == false) + { + assert_eq(status, ML_ERROR_NOT_SUPPORTED); + } + else + { + assert_eq(status, ML_ERROR_NONE); + } + + ml_train_optimizer_destroy(opt); + return 0; +} + +/** + * @function utc_nntrainer_optimizer_set_lr_scheduler_n1 + * @since_tizen 7.5 + * @description Test for set lr_scheduler owned by other optimizer + */ +int utc_nntrainer_optimizer_set_lr_scheduler_n1(void) +{ + ml_train_optimizer_h other_opt; + ml_train_optimizer_create(&other_opt, ML_TRAIN_OPTIMIZER_TYPE_SGD); + ml_train_lr_scheduler_create(&lr_scheduler, ML_TRAIN_LR_SCHEDULER_TYPE_CONSTANT); + ml_train_optimizer_set_lr_scheduler(other_opt, lr_scheduler); + + ml_train_optimizer_create(&opt, ML_TRAIN_OPTIMIZER_TYPE_SGD); + status = ml_train_optimizer_set_lr_scheduler(opt, lr_scheduler); + if (train_supported == false) + { + assert_eq(status, ML_ERROR_NOT_SUPPORTED); + } + else + { + assert_eq(status, ML_ERROR_INVALID_PARAMETER); + } + + ml_train_optimizer_destroy(opt); + ml_train_optimizer_destroy(other_opt); + return 0; +} + +/** + * @function utc_nntrainer_optimizer_set_lr_scheduler_n2 + * @since_tizen 7.5 + * @description Test for set lr_scheduler passing null + */ +int utc_nntrainer_optimizer_set_lr_scheduler_n2(void) +{ + ml_train_optimizer_create(&opt, ML_TRAIN_OPTIMIZER_TYPE_SGD); + status = ml_train_optimizer_set_lr_scheduler(opt, NULL); + if (train_supported == false) + { + assert_eq(status, ML_ERROR_NOT_SUPPORTED); + } + else + { + assert_eq(status, ML_ERROR_INVALID_PARAMETER); + } + + ml_train_optimizer_destroy(opt); + return 0; +}