[Dataset] Change generator_sample signature
authorJihoon Lee <jhoon.it.lee@samsung.com>
Thu, 12 Aug 2021 09:11:54 +0000 (18:11 +0900)
committerJijoong Moon <jijoong.moon@samsung.com>
Thu, 26 Aug 2021 07:50:41 +0000 (16:50 +0900)
This patch changes generator sample signature from std::vector<Tensor *>
to std::vector<Tensor>

**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>
nntrainer/dataset/data_producer.h
nntrainer/dataset/func_data_producer.cpp
nntrainer/dataset/random_data_producers.cpp
nntrainer/dataset/raw_file_data_producer.cpp
test/unittest/datasets/data_producer_common_tests.cpp

index 78c9d49..e0c2094 100644 (file)
@@ -71,10 +71,9 @@ public:
    * and should be used, or passed at will of caller
    *
    */
-  using Generator_sample =
-    std::function<bool(unsigned int, /** index */
-                       std::vector<Tensor *> & /** inputs */,
-                       std::vector<Tensor *> & /** labels */)>;
+  using Generator_sample = std::function<bool(
+    unsigned int, /** index */
+    std::vector<Tensor> & /** inputs */, std::vector<Tensor> & /** labels */)>;
 
   constexpr inline static unsigned int SIZE_UNDEFINED =
     std::numeric_limits<unsigned int>::max();
index 498836c..b30b6b4 100644 (file)
@@ -104,17 +104,17 @@ FuncDataProducer::finalize_sample(const std::vector<TensorDim> &input_dims,
                                              std::default_delete<float *[]>());
 
   return [cb = this->cb, ud = this->user_data_prop->get(), input_data,
-          label_data](unsigned int idx, std::vector<Tensor *> &inputs,
-                      std::vector<Tensor *> &labels) -> bool {
+          label_data](unsigned int idx, std::vector<Tensor> &inputs,
+                      std::vector<Tensor> &labels) -> bool {
     float **input_data_raw = input_data.get();
     float **label_data_raw = label_data.get();
 
     for (unsigned int i = 0; i < inputs.size(); ++i) {
-      *(input_data_raw + i) = inputs[i]->getData();
+      *(input_data_raw + i) = inputs[i].getData();
     }
 
     for (unsigned int i = 0; i < labels.size(); ++i) {
-      *(label_data_raw + i) = labels[i]->getData();
+      *(label_data_raw + i) = labels[i].getData();
     }
 
     bool last = false;
index 18141a3..407f528 100644 (file)
@@ -216,14 +216,14 @@ DataProducer::Generator_sample RandomDataOneHotProducer::finalize_sample(
   /** DataProducer::Generator_sample */
   return [rng, sz, min_ = min_.get(), max_ = max_.get(),
           label_chooser = std::move(label_chooser_)](
-           unsigned int idx, std::vector<Tensor *> &inputs,
-           std::vector<Tensor *> &labels) mutable -> bool {
-    auto populate_input = [&](Tensor *t) { t->setRandUniform(min_, max_); };
+           unsigned int idx, std::vector<Tensor> &inputs,
+           std::vector<Tensor> &labels) mutable -> bool {
+    auto populate_input = [&](Tensor &t) { t.setRandUniform(min_, max_); };
 
     auto populate_label =
-      [&](Tensor *t, std::uniform_int_distribution<unsigned int> &label_dist_) {
-        t->setZero();
-        t->setValue(0, 0, 0, label_dist_(rng), 1);
+      [&](Tensor &t, std::uniform_int_distribution<unsigned int> &label_dist_) {
+        t.setZero();
+        t.setValue(0, 0, 0, label_dist_(rng), 1);
         return t;
       };
 
index 89ffae2..baecf93 100644 (file)
@@ -180,17 +180,17 @@ RawFileDataProducer::finalize_sample(const std::vector<TensorDim> &input_dims,
   static thread_local std::ifstream file_(path_prop.get(), std::ios::binary);
 
   return [idxes = std::move(idxes_), sz](unsigned int idx,
-                                         std::vector<Tensor *> &inputs,
-                                         std::vector<Tensor *> &labels) {
+                                         std::vector<Tensor> &inputs,
+                                         std::vector<Tensor> &labels) {
     NNTR_THROW_IF(idx >= sz, std::range_error)
       << "given index is out of bound, index: " << idx << " size: " << sz;
 
     file_.seekg(idxes[idx], std::ios_base::beg);
     for (auto &input : inputs) {
-      input->read(file_);
+      input.read(file_);
     }
     for (auto &label : labels) {
-      label->read(file_);
+      label.read(file_);
     }
 
     return idx == sz - 1;
index a4fd2ba..9313ea7 100644 (file)
 #include <tuple>
 #include <vector>
 
-static std::tuple<std::vector<nntrainer::Tensor *> /** inputs_view */,
-                  std::vector<nntrainer::Tensor *> /** labels_view */,
-                  std::shared_ptr<std::vector<nntrainer::Tensor>> /** inputs */,
-                  std::shared_ptr<std::vector<nntrainer::Tensor>> /** labels */>
+static std::tuple<std::vector<nntrainer::Tensor> /** inputs */,
+                  std::vector<nntrainer::Tensor> /** labels */>
 createSample(const std::vector<nntrainer::TensorDim> &input_dims,
              const std::vector<nntrainer::TensorDim> &label_dims) {
   using namespace nntrainer;
@@ -30,31 +28,19 @@ createSample(const std::vector<nntrainer::TensorDim> &input_dims,
     return t;
   };
 
-  auto populate_view = [](Tensor &t) { return &t; };
+  std::vector<Tensor> inputs;
+  inputs.reserve(input_dims.size());
 
-  auto inputs = std::make_shared<std::vector<Tensor>>();
-  inputs->reserve(input_dims.size());
-
-  auto labels = std::make_shared<std::vector<Tensor>>();
-  labels->reserve(label_dims.size());
+  std::vector<Tensor> labels;
+  labels.reserve(label_dims.size());
 
   std::transform(input_dims.begin(), input_dims.end(),
-                 std::back_inserter(*inputs), populate_tensor);
+                 std::back_inserter(inputs), populate_tensor);
 
   std::transform(label_dims.begin(), label_dims.end(),
-                 std::back_inserter(*labels), populate_tensor);
-
-  std::vector<Tensor *> input_view;
-  input_view.reserve(input_dims.size());
-  std::transform(inputs->begin(), inputs->end(), std::back_inserter(input_view),
-                 populate_view);
-
-  std::vector<Tensor *> label_view;
-  label_view.reserve(label_dims.size());
-  std::transform(labels->begin(), labels->end(), std::back_inserter(label_view),
-                 populate_view);
+                 std::back_inserter(labels), populate_tensor);
 
-  return {input_view, label_view, inputs, labels};
+  return {inputs, labels};
 }
 
 /** batchwise producer tests */
@@ -205,10 +191,9 @@ TEST_P(DataProducerSemantics_samples, fetch_one_epoch_or_10_iteration_pn) {
     sz = 10;
   }
 
-  auto [input_view, label_view, inputs, labels] =
-    createSample(input_dims, label_dims);
+  auto [inputs, labels] = createSample(input_dims, label_dims);
   for (unsigned i = 0; i < sz; ++i) {
-    auto last = generator(i, input_view, label_view);
+    auto last = generator(i, inputs, labels);
 
     if (i == sz - 1 && has_fixed_size) {
       EXPECT_TRUE(last);
@@ -217,7 +202,7 @@ TEST_P(DataProducerSemantics_samples, fetch_one_epoch_or_10_iteration_pn) {
     }
 
     if (validator) {
-      ASSERT_TRUE(validator(*inputs, *labels))
+      ASSERT_TRUE(validator(inputs, labels))
         << " failed validation for iteration: " << i << '\n';
     }
   }