Change neuralnet setConfig to throw
authorJihoon Lee <jhoon.it.lee@samsung.com>
Tue, 28 Jul 2020 08:59:09 +0000 (17:59 +0900)
committerJijoong Moon <jijoong.moon@samsung.com>
Thu, 30 Jul 2020 02:44:18 +0000 (11:44 +0900)
Change `Neuralnet::setConfig` to throw instead of return status

**This PR also patches:**
- Minor typos
- Delete unused function
- Fix neuralnet ctor delegation order

**Self evaluation:**
1. Build test: [X]Passed [ ]Failed [ ]Skipped
2. Run test: [X]Passed [ ]Failed [ ]Skipped

Signed-off-by: Jihoon Lee <jhoon.it.lee@samsung.com>
Applications/Classification/jni/main.cpp
Applications/Classification/jni/main_func.cpp
Applications/Training/jni/main.cpp
Applications/mnist/jni/main.cpp
api/capi/src/nntrainer.cpp
nntrainer/include/neuralnet.h
nntrainer/src/neuralnet.cpp
test/unittest/unittest_nntrainer_internal.cpp

index f26f787..1254327 100644 (file)
@@ -407,9 +407,9 @@ int main(int argc, char *argv[]) {
    * @brief     Neural Network Create & Initialization
    */
   nntrainer::NeuralNetwork NN;
-  NN.setConfig(config);
-  NN.loadFromConfig();
   try {
+    NN.setConfig(config);
+    NN.loadFromConfig();
     NN.init();
   } catch (...) {
     std::cerr << "Error during init" << std::endl;
index 65111ef..e307f10 100644 (file)
@@ -296,8 +296,9 @@ int main(int argc, char *argv[]) {
    * @brief     Neural Network Create & Initialization
    */
   nntrainer::NeuralNetwork NN;
-  NN.setConfig(config);
+
   try {
+    NN.setConfig(config);
     NN.loadFromConfig();
   } catch (...) {
     std::cerr << "Error during loadFromConfig" << std::endl;
index de70968..d770fda 100644 (file)
@@ -247,9 +247,16 @@ int main(int argc, char *argv[]) {
    * @brief     Neural Network Create & Initialization
    */
   nntrainer::NeuralNetwork NN;
-  NN.setConfig(config);
-  NN.loadFromConfig();
-  NN.init();
+
+  try {
+    NN.setConfig(config);
+    NN.loadFromConfig();
+    NN.init();
+  } catch (...) {
+    std::cerr << "Error during initiation" << std::endl;
+    NN.finalize();
+    return -1;
+  }
 
   /**
    * @brief     back propagation
index ffd1d44..63f979b 100644 (file)
@@ -232,8 +232,8 @@ int main(int argc, char *argv[]) {
    * @brief     Neural Network Create & Initialization
    */
   nntrainer::NeuralNetwork NN;
-  NN.setConfig(config);
   try {
+    NN.setConfig(config);
     NN.loadFromConfig();
   } catch (...) {
     std::cerr << "Error during loadFromConfig" << std::endl;
index bae5156..3644be0 100644 (file)
@@ -158,7 +158,10 @@ int ml_train_model_construct_with_conf(const char *model_conf,
   nnmodel = (ml_train_model *)(*model);
   NN = nnmodel->network;
 
-  f = [&]() { return NN->setConfig(model_conf); };
+  f = [&]() {
+    NN->setConfig(model_conf);
+    return ML_ERROR_NONE;
+  };
   status = nntrainer_exception_boundary(f);
   if (status != ML_ERROR_NONE) {
     ml_train_model_destroy(*model);
index 2232ab7..83138cf 100644 (file)
@@ -169,10 +169,9 @@ public:
   /**
    * @brief     set configuration file
    * @param[in] config_path configuration file path
-   * @retval #ML_ERROR_NONE Successful.
-   * @retval #ML_ERROR_INVALID_PARAMETER invalid parameter.
+   * @throw std::invalid_argument when file path is not usuable.
    */
-  int setConfig(std::string config_path);
+  void setConfig(std::string config_path);
 
   /**
    * @brief     get Epoch
index 6340b1f..ae575fd 100644 (file)
@@ -70,27 +70,7 @@ static bool is_file_exist(std::string file_name) {
   return infile.good();
 }
 
-/**
- * @brief     Parsing Layer Name
- * @param[in] string layer name
- * @retval    vector stored layer name
- */
-std::vector<std::string> parseLayerName(std::string ll) {
-  std::vector<std::string> ret;
-  std::istringstream ss(ll);
-  do {
-    std::string word;
-    ss >> word;
-    if (word.compare("") != 0)
-      ret.push_back(word);
-  } while (ss);
-
-  return ret;
-}
-
-NeuralNetwork::NeuralNetwork() : NeuralNetwork("") {}
-
-NeuralNetwork::NeuralNetwork(std::string config) :
+NeuralNetwork::NeuralNetwork() :
   batch_size(1),
   epoch(1),
   loss(0.0f),
@@ -101,20 +81,19 @@ NeuralNetwork::NeuralNetwork(std::string config) :
   continue_train(false),
   iter(0),
   initialized(false),
-  def_name_count(0) {
+  def_name_count(0) {}
+
+NeuralNetwork::NeuralNetwork(std::string config) : NeuralNetwork() {
   this->setConfig(config);
 }
 
-int NeuralNetwork::setConfig(std::string config) {
-  int status = ML_ERROR_NONE;
-
+void NeuralNetwork::setConfig(std::string config) {
   if (!is_file_exist(config)) {
-    ml_loge("Error: Cannot open model configuration file");
-    return ML_ERROR_INVALID_PARAMETER;
+    std::stringstream ss;
+    ss << "Cannot open model configuration file, filename : " << config;
+    throw std::invalid_argument(ss.str().c_str());
   }
   this->config = config;
-
-  return status;
 }
 
 int NeuralNetwork::loadNetworkConfig(void *_ini) {
index 76d2fa7..69f777c 100644 (file)
 #include <nntrainer_error.h>
 
 /**
- * @brief Neural Network Model Configuration with ini file (possitive test )
+ * @brief Neural Network Model Configuration with ini file (positive test)
  */
 TEST(nntrainer_NeuralNetwork, setConfig_01_p) {
-  int status = ML_ERROR_NONE;
   std::string config_file = "./test.ini";
   RESET_CONFIG(config_file.c_str());
   replaceString("Layers = inputlayer outputlayer",
                 "Layers = inputlayer outputlayer", config_file, config_str);
   nntrainer::NeuralNetwork NN;
-  status = NN.setConfig(config_file);
-  EXPECT_EQ(status, ML_ERROR_NONE);
+  EXPECT_NO_THROW(NN.setConfig(config_file));
 }
 
 /**
- * @brief Neural Network Model Configuration with ini file (negative test )
+ * @brief Neural Network Model Configuration with ini file (negative test)
  */
 TEST(nntrainer_NeuralNetwork, setConfig_02_n) {
-  int status = ML_ERROR_NONE;
   std::string config_file = "../test/not_found.ini";
   nntrainer::NeuralNetwork NN;
-  status = NN.setConfig(config_file);
-  EXPECT_EQ(status, ML_ERROR_INVALID_PARAMETER);
+  EXPECT_THROW(NN.setConfig(config_file), std::invalid_argument);
 }
 
 /**
@@ -63,8 +59,8 @@ TEST(nntrainer_NeuralNetwork, init_01_p) {
   replaceString("Layers = inputlayer outputlayer",
                 "Layers = inputlayer outputlayer", config_file, config_str);
   nntrainer::NeuralNetwork NN;
-  status = NN.setConfig(config_file);
-  EXPECT_EQ(status, ML_ERROR_NONE);
+  EXPECT_NO_THROW(NN.setConfig(config_file));
+
   status = NN.loadFromConfig();
   EXPECT_EQ(status, ML_ERROR_NONE);
   status = NN.init();
@@ -79,8 +75,8 @@ TEST(nntrainer_NeuralNetwork, load_config_01_n) {
   RESET_CONFIG("./test.ini");
   replaceString("[Network]", "", "./test.ini", config_str);
   nntrainer::NeuralNetwork NN;
-  status = NN.setConfig("./test.ini");
-  EXPECT_EQ(status, ML_ERROR_NONE);
+  NN.setConfig("./test.ini");
+
   status = NN.loadFromConfig();
   EXPECT_EQ(status, ML_ERROR_INVALID_PARAMETER);
 }
@@ -93,8 +89,8 @@ TEST(nntrainer_NeuralNetwork, load_config_02_n) {
   RESET_CONFIG("./test.ini");
   replaceString("adam", "aaaadam", "./test.ini", config_str);
   nntrainer::NeuralNetwork NN;
-  status = NN.setConfig("./test.ini");
-  EXPECT_EQ(status, ML_ERROR_NONE);
+  NN.setConfig("./test.ini");
+
   status = NN.loadFromConfig();
   EXPECT_EQ(status, ML_ERROR_INVALID_PARAMETER);
 }
@@ -103,13 +99,14 @@ TEST(nntrainer_NeuralNetwork, load_config_02_n) {
  * @brief Neural Network Model initialization
  */
 TEST(nntrainer_NeuralNetwork, load_config_03_n) {
-  int status = ML_ERROR_NONE;
   RESET_CONFIG("./test.ini");
   replaceString("Input_Shape = 32:1:1:62720", "Input_Shape = 32:1:1:0",
                 "./test.ini", config_str);
   nntrainer::NeuralNetwork NN;
-  status = NN.setConfig("./test.ini");
-  EXPECT_EQ(status, ML_ERROR_NONE);
+  NN.setConfig("./test.ini");
+
+  /**< C++ exception with description "[TensorDim] Trying to assign value of 0
+   * to tensor dim" thrown in the test body. */
   EXPECT_THROW(NN.loadFromConfig(), std::invalid_argument);
 }
 
@@ -122,8 +119,8 @@ TEST(nntrainer_NeuralNetwork, load_config_04_p) {
   RESET_CONFIG("./test.ini");
   replaceString("Input_Shape = 32:1:1:62720", "", "./test.ini", config_str);
   nntrainer::NeuralNetwork NN;
-  status = NN.setConfig("./test.ini");
-  EXPECT_EQ(status, ML_ERROR_NONE);
+  NN.setConfig("./test.ini");
+
   status = NN.loadFromConfig();
   EXPECT_EQ(status, ML_ERROR_NONE);
 }
@@ -137,7 +134,8 @@ TEST(nntrainer_NeuralNetwork, load_config_05_n) {
   replaceString("Learning_rate = 0.0001", "Learning_rate = -0.0001",
                 "./test.ini", config_str);
   nntrainer::NeuralNetwork NN;
-  status = NN.setConfig("./test.ini");
+  NN.setConfig("./test.ini");
+
   EXPECT_EQ(status, ML_ERROR_NONE);
   status = NN.loadFromConfig();
   EXPECT_EQ(status, ML_ERROR_INVALID_PARAMETER);
@@ -151,7 +149,8 @@ TEST(nntrainer_NeuralNetwork, load_config_06_p) {
   RESET_CONFIG("./test.ini");
   replaceString("TrainData = trainingSet.dat", "", "./test.ini", config_str);
   nntrainer::NeuralNetwork NN;
-  status = NN.setConfig("./test.ini");
+  NN.setConfig("./test.ini");
+
   EXPECT_EQ(status, ML_ERROR_NONE);
   status = NN.loadFromConfig();
   EXPECT_EQ(status, ML_ERROR_INVALID_PARAMETER);
@@ -166,7 +165,8 @@ TEST(nntrainer_NeuralNetwork, load_config_07_p) {
   replaceString("bias_init_zero = true", "Bias_Init_Zero = false", "./test.ini",
                 config_str);
   nntrainer::NeuralNetwork NN;
-  status = NN.setConfig("./test.ini");
+  NN.setConfig("./test.ini");
+
   EXPECT_EQ(status, ML_ERROR_NONE);
   status = NN.loadFromConfig();
   EXPECT_EQ(status, ML_ERROR_NONE);
@@ -180,8 +180,8 @@ TEST(nntrainer_NeuralNetwork, init_02_p) {
   RESET_CONFIG("./test.ini");
   replaceString("TestData = testSet.dat", "", "./test.ini", config_str);
   nntrainer::NeuralNetwork NN;
-  status = NN.setConfig("./test.ini");
-  EXPECT_EQ(status, ML_ERROR_NONE);
+  NN.setConfig("./test.ini");
+
   status = NN.loadFromConfig();
   EXPECT_EQ(status, ML_ERROR_NONE);
   status = NN.init();
@@ -196,8 +196,8 @@ TEST(nntrainer_NeuralNetwork, load_config_07_n) {
   RESET_CONFIG("./test.ini");
   replaceString("LabelData = label.dat", "", "./test.ini", config_str);
   nntrainer::NeuralNetwork NN;
-  status = NN.setConfig("./test.ini");
-  EXPECT_EQ(status, ML_ERROR_NONE);
+  NN.setConfig("./test.ini");
+
   status = NN.loadFromConfig();
   EXPECT_EQ(status, ML_ERROR_INVALID_PARAMETER);
 }
@@ -211,8 +211,8 @@ TEST(nntrainer_NeuralNetwork, init_03_p) {
   RESET_CONFIG(config_file.c_str());
   replaceString("ValidData = valSet.dat", "", config_file, config_str);
   nntrainer::NeuralNetwork NN;
-  status = NN.setConfig(config_file);
-  EXPECT_EQ(status, ML_ERROR_NONE);
+  NN.setConfig(config_file);
+
   status = NN.loadFromConfig();
   EXPECT_EQ(status, ML_ERROR_NONE);
   status = NN.init();
@@ -279,8 +279,7 @@ TEST(nntrainer_Conv2DLayer, initialize_01_p) {
   RESET_CONFIG(config_file.c_str());
   replaceString("ValidData = valSet.dat", "", config_file, config_str2);
   nntrainer::NeuralNetwork NN;
-  status = NN.setConfig(config_file);
-  EXPECT_EQ(status, ML_ERROR_NONE);
+  NN.setConfig(config_file);
   status = NN.loadFromConfig();
   EXPECT_EQ(status, ML_ERROR_NONE);
   status = NN.init();
@@ -288,7 +287,7 @@ TEST(nntrainer_Conv2DLayer, initialize_01_p) {
 }
 
 /**
- * @brief Flatten Layer
+ * @brief Conv2D Layer
  */
 TEST(nntrainer_Conv2DLayer, initialize_02_p) {
   int status = ML_ERROR_NONE;
@@ -296,8 +295,7 @@ TEST(nntrainer_Conv2DLayer, initialize_02_p) {
   RESET_CONFIG(config_file.c_str());
   replaceString("flatten = false", "flatten = true", config_file, config_str2);
   nntrainer::NeuralNetwork NN;
-  status = NN.setConfig(config_file);
-  EXPECT_EQ(status, ML_ERROR_NONE);
+  NN.setConfig(config_file);
   status = NN.loadFromConfig();
   EXPECT_EQ(status, ML_ERROR_NONE);
   status = NN.init();
@@ -313,8 +311,7 @@ TEST(nntrainer_Layer, initialize_03_p) {
   RESET_CONFIG(config_file.c_str());
   replaceString("flatten = false", "flatten = true", config_file, config_str2);
   nntrainer::NeuralNetwork NN;
-  status = NN.setConfig(config_file);
-  EXPECT_EQ(status, ML_ERROR_NONE);
+  NN.setConfig(config_file);
   status = NN.loadFromConfig();
   EXPECT_EQ(status, ML_ERROR_NONE);
   status = NN.init();