* 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();
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;
/** 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;
};
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;
#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;
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 */
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);
}
if (validator) {
- ASSERT_TRUE(validator(*inputs, *labels))
+ ASSERT_TRUE(validator(inputs, labels))
<< " failed validation for iteration: " << i << '\n';
}
}