-
// SPDX-License-Identifier: Apache-2.0
/**
* Copyright (C) 2020 Parichay Kapoor <pk.kapoor@samsung.com>
};
/**
- * @brief Factory creator with constructor for dataset
+ * @brief Create a Dataset object with given arguements
+ *
+ * @param type dataset type
+ * @param properties property representations
+ * @return std::unique_ptr<Dataset> created dataset
*/
std::unique_ptr<Dataset>
createDataset(DatasetType type,
const std::vector<std::string> &properties = {});
/**
- * @brief Factory creator with constructor for dataset
+ * @brief Create a Dataset object
+ *
+ * @param type dataset type
+ * @param path path to a file or folder
+ * @param properties property representations
+ * @return std::unique_ptr<Dataset> created dataset
*/
-std::unique_ptr<Dataset> createDataset(DatasetType type, const char *file);
+std::unique_ptr<Dataset>
+createDataset(DatasetType type, const char *path,
+ const std::vector<std::string> &properties = {});
/**
- * @brief Factory creator with constructor for dataset
+ * @brief Create a Dataset object
+ *
+ * @param type dataset type
+ * @param cb callback
+ * @param user_data user data
+ * @param properties property representations
+ * @return std::unique_ptr<Dataset> created dataset
*/
-std::unique_ptr<Dataset> createDataset(DatasetType type, datagen_cb cb,
- void *user_data = nullptr);
-
+std::unique_ptr<Dataset>
+createDataset(DatasetType type, datagen_cb cb, void *user_data = nullptr,
+ const std::vector<std::string> &properties = {});
} // namespace train
} // namespace ml
std::unique_ptr<Dataset>
createDataset(DatasetType type, const std::vector<std::string> &properties) {
std::unique_ptr<Dataset> dataset = nntrainer::createDataBuffer(type);
-
dataset->setProperty(properties);
return dataset;
}
-/**
- * @brief Factory creator with constructor for dataset
- */
-std::unique_ptr<Dataset> createDataset(DatasetType type, const char *file) {
- return nntrainer::createDataBuffer(type, file);
+std::unique_ptr<Dataset>
+createDataset(DatasetType type, const char *file,
+ const std::vector<std::string> &properties) {
+ std::unique_ptr<Dataset> dataset = nntrainer::createDataBuffer(type, file);
+ dataset->setProperty(properties);
+
+ return dataset;
}
/**
* @brief Factory creator with constructor for dataset
*/
-std::unique_ptr<Dataset> createDataset(DatasetType type, datagen_cb cb,
- void *user_data) {
- return nntrainer::createDataBuffer(type, cb, user_data);
+std::unique_ptr<Dataset>
+createDataset(DatasetType type, datagen_cb cb, void *user_data,
+ const std::vector<std::string> &properties) {
+ std::unique_ptr<Dataset> dataset =
+ nntrainer::createDataBuffer(type, cb, user_data);
+ dataset->setProperty(properties);
+
+ return dataset;
}
} // namespace train
*/
std::unique_ptr<DataBuffer> createDataBuffer(DatasetType type) {
switch (type) {
- case DatasetType::GENERATOR:
- return std::make_unique<DataBufferFromCallback>();
case DatasetType::FILE:
return std::make_unique<DataBufferFromDataFile>();
case DatasetType::UNKNOWN:
- /** fallthrough intended */
+ [[fallthrough]];
default:
- throw std::invalid_argument("Unknown type for the dataset");
+ throw std::invalid_argument("Unsupported constructor type for the dataset");
}
}
*/
std::unique_ptr<DataBuffer> createDataBuffer(DatasetType type,
const char *file) {
- if (type != DatasetType::FILE)
- throw std::invalid_argument(
- "Cannot create dataset with files with the given dataset type");
-
- std::unique_ptr<DataBuffer> dataset = createDataBuffer(type);
+ NNTR_THROW_IF(file == nullptr, std::invalid_argument)
+ << "file shall not be null, use empty constructor instead";
- NNTR_THROW_IF(file == nullptr || dataset->setDataFile(file) != ML_ERROR_NONE,
- std::invalid_argument)
- << "invalid train file, path: " << (file ? file : "null");
-
- return dataset;
+ switch (type) {
+ case DatasetType::FILE:
+ return std::make_unique<DataBufferFromDataFile>(file);
+ case DatasetType::UNKNOWN:
+ [[fallthrough]];
+ default:
+ throw std::invalid_argument(
+ "Unsupported constructor type for the dataset of type: " +
+ static_cast<int>(type));
+ };
}
/**
*/
std::unique_ptr<DataBuffer> createDataBuffer(DatasetType type, datagen_cb cb,
void *user_data) {
- if (type != DatasetType::GENERATOR)
- throw std::invalid_argument("Cannot create dataset with generator "
- "callbacks with the given dataset type");
-
- std::unique_ptr<DataBuffer> dataset = createDataBuffer(type);
-
- if (dataset->setGeneratorFunc(cb, user_data) != ML_ERROR_NONE)
- throw std::invalid_argument("Invalid train data generator");
-
- return dataset;
+ switch (type) {
+ case DatasetType::GENERATOR:
+ return std::make_unique<DataBufferFromCallback>(cb, user_data);
+ case DatasetType::UNKNOWN:
+ [[fallthrough]];
+ default:
+ throw std::invalid_argument(
+ "Unsupported constructor type for the dataset of type: " +
+ static_cast<int>(type));
+ };
}
} // namespace nntrainer
#include <vector>
#include <databuffer.h>
+#include <nntrainer_error.h>
namespace nntrainer {
*/
DataBufferFromDataFile() : DataBuffer(DatasetType::FILE) {}
+ /**
+ * @brief Constructor
+ */
+ DataBufferFromDataFile(const std::string &path) : DataBufferFromDataFile() {
+ NNTR_THROW_IF(setDataFile(path) != ML_ERROR_NONE, std::invalid_argument)
+ << "invalid train file, path: " << path;
+ }
+
/**
* @brief Destructor
*/
*/
DataBufferFromCallback() : DataBuffer(DatasetType::GENERATOR) {}
+ /**
+ * @brief Construct a new Data Buffer From Callback object
+ *
+ */
+ DataBufferFromCallback(datagen_cb func, void *user_data = nullptr) :
+ DataBuffer(DatasetType::GENERATOR) {
+ setGeneratorFunc(func, user_data);
+ }
+
/**
* @brief Destructor
*/
return ML_ERROR_INVALID_PARAMETER;
}
- model.data_buffers[static_cast<int>(DatasetDataUsageType::DATA_TRAIN)] =
- nntrainer::createDataBuffer(DatasetType::FILE);
- model.data_buffers[static_cast<int>(DatasetDataUsageType::DATA_VAL)] =
- nntrainer::createDataBuffer(DatasetType::FILE);
- model.data_buffers[static_cast<int>(DatasetDataUsageType::DATA_TEST)] =
- nntrainer::createDataBuffer(DatasetType::FILE);
-
/// @todo ini bufferSize -> buffer_size to unify
std::string bufsizepros("buffer_size=");
bufsizepros += iniparser_getstring(ini, "DataSet:BufferSize", "1");
return required ? ML_ERROR_INVALID_PARAMETER : ML_ERROR_NONE;
}
- auto dbuffer = std::static_pointer_cast<DataBufferFromDataFile>(
- model.data_buffers[static_cast<int>(dt)]);
-
- dbuffer->setProperty({bufsizepros});
+ try {
+ model.data_buffers[static_cast<int>(dt)] =
+ createDataBuffer(DatasetType::FILE, resolvePath(path).c_str());
+ model.data_buffers[static_cast<int>(dt)]->setProperty({bufsizepros});
+ } catch (...) {
+ ml_loge("path is not valid, path: %s", resolvePath(path).c_str());
+ return ML_ERROR_INVALID_PARAMETER;
+ }
- return dbuffer->setDataFile(resolvePath(path));
+ return ML_ERROR_NONE;
};
status =
/**
* @brief Neural Network Dataset Contruct Test
*/
-TEST(ccapi_dataset, construct_02_p) {
- EXPECT_NO_THROW(ml::train::createDataset(ml::train::DatasetType::GENERATOR));
- EXPECT_NO_THROW(ml::train::createDataset(ml::train::DatasetType::FILE));
+TEST(ccapi_dataset, construct_02_n) {
+ EXPECT_THROW(ml::train::createDataset(ml::train::DatasetType::GENERATOR),
+ std::invalid_argument);
}
static nntrainer::IniSection model_base("Model", "Type = NeuralNetwork"