Update setDataset / loadDataset
authorJihoon Lee <jhoon.it.lee@samsung.com>
Thu, 30 Jul 2020 02:16:46 +0000 (11:16 +0900)
committerJijoong Moon <jijoong.moon@samsung.com>
Mon, 3 Aug 2020 10:56:19 +0000 (19:56 +0900)
When path is given and invalid, it should fail. This patch updates
accordingly.

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

Signed-off-by: Jihoon Lee <jhoon.it.lee@samsung.com>
nntrainer/src/databuffer_file.cpp
nntrainer/src/neuralnet.cpp

index da0774dfadfac77991c30ef72fdc660097b632c9..a10ecad6940a63ac11ddc94174ae714c926a424f 100644 (file)
@@ -290,20 +290,19 @@ int DataBufferFromDataFile::setDataFile(std::string path, DataType type) {
   case DATA_VAL: {
     validation[type] = true;
     if (!data_file.good()) {
-      ml_logw("Warning: Cannot open validation data file. Cannot validate "
+      ml_loge("Error: Cannot open validation data file. Cannot validate "
               "training result");
       validation[type] = false;
-      break;
+      return ML_ERROR_INVALID_PARAMETER;
     }
     val_name = path;
   } break;
   case DATA_TEST: {
     validation[type] = true;
     if (!data_file.good()) {
-      ml_logw(
-        "Warning: Cannot open test data file. Cannot test training result");
+      ml_loge("Error: Cannot open test data file. Cannot test training result");
       validation[type] = false;
-      break;
+      return ML_ERROR_INVALID_PARAMETER;
     }
     test_name = path;
   } break;
index b89e136ca0b1180e7685f95358168c2cda658b18..30fb4d0e8304c83dca5ac91d32652338f2664145 100644 (file)
@@ -132,6 +132,7 @@ int NeuralNetwork::loadNetworkConfig(void *_ini) {
   return status;
 }
 
+/// @fixme: 370
 int NeuralNetwork::loadDatasetConfig(void *_ini) {
   int status = ML_ERROR_NONE;
 
@@ -140,29 +141,37 @@ int NeuralNetwork::loadDatasetConfig(void *_ini) {
   if (iniparser_find_entry(ini, "DataSet:Tflite")) {
     ml_loge("Error: Tflite dataset is not yet implemented!");
     return ML_ERROR_INVALID_PARAMETER;
-  } else {
-    data_buffer = std::make_shared<DataBufferFromDataFile>();
-    std::shared_ptr<DataBufferFromDataFile> dbuffer =
-      std::static_pointer_cast<DataBufferFromDataFile>(data_buffer);
-
-    status = dbuffer->setDataFile(
-      iniparser_getstring(ini, "DataSet:TrainData", ""), DATA_TRAIN);
-    NN_INI_RETURN_STATUS();
-    status = dbuffer->setDataFile(
-      iniparser_getstring(ini, "DataSet:ValidData", ""), DATA_VAL);
-    NN_INI_RETURN_STATUS();
-    status = dbuffer->setDataFile(
-      iniparser_getstring(ini, "DataSet:TestData", ""), DATA_TEST);
-    NN_INI_RETURN_STATUS();
-    status = dbuffer->setDataFile(
-      iniparser_getstring(ini, "DataSet:LabelData", ""), DATA_LABEL);
-    NN_INI_RETURN_STATUS();
-    /// fixme: #299
-    status = data_buffer->setBufSize(
-      iniparser_getint(ini, "DataSet:BufferSize", batch_size));
-    NN_INI_RETURN_STATUS();
   }
 
+  data_buffer = std::make_shared<DataBufferFromDataFile>();
+  std::shared_ptr<DataBufferFromDataFile> dbuffer =
+    std::static_pointer_cast<DataBufferFromDataFile>(data_buffer);
+
+  std::function<int(const char *, DataType, bool)> parse_and_set =
+    [&](const char *key, DataType dt, bool required) -> int {
+    const char *path = iniparser_getstring(ini, key, NULL);
+
+    if (path == NULL) {
+      return required ? ML_ERROR_INVALID_PARAMETER : ML_ERROR_NONE;
+    }
+
+    return dbuffer->setDataFile(path, dt);
+  };
+
+  status = parse_and_set("DataSet:TrainData", DATA_TRAIN, true);
+  NN_INI_RETURN_STATUS();
+  status = parse_and_set("DataSet:ValidData", DATA_VAL, false);
+  NN_INI_RETURN_STATUS();
+  status = parse_and_set("DataSet:TestData", DATA_TEST, false);
+  NN_INI_RETURN_STATUS();
+  status = parse_and_set("Dataset:LabelData", DATA_LABEL, true);
+  NN_INI_RETURN_STATUS();
+
+  /// fixme: #299
+  status = data_buffer->setBufSize(
+    iniparser_getint(ini, "DataSet:BufferSize", batch_size));
+  NN_INI_RETURN_STATUS();
+
   return status;
 }