diff --git a/src/CSVReader/CSVReader.cpp b/src/CSVReader/CSVReader.cpp index 7a2127254954091f40ce33a7224555b8145646e5..22c739addb7479dc0e37cff247405d7fecee0db9 100644 --- a/src/CSVReader/CSVReader.cpp +++ b/src/CSVReader/CSVReader.cpp @@ -88,6 +88,7 @@ namespace lib4neuro { data_set_contents.push_back(std::make_pair(input, output)); } - return DataSet(&data_set_contents); + DoubleUnitStrategy* ds = new DoubleUnitStrategy(); + return DataSet(&data_set_contents, ds); } } \ No newline at end of file diff --git a/src/DataSet/DataSet.cpp b/src/DataSet/DataSet.cpp index fa517d0db2859bf151f55ef63b6371fbf8e9c21e..72ce426af68e952da316cd3884ced66f47a268d6 100644 --- a/src/DataSet/DataSet.cpp +++ b/src/DataSet/DataSet.cpp @@ -38,8 +38,8 @@ namespace lib4neuro { if(ns) { this->normalization_strategy = ns; - this->max_min_inp_val.at(0) = this->normalization_strategy->get_max_value(); - this->max_min_inp_val.at(1) = this->normalization_strategy->get_min_value(); +// this->max_min_inp_val.emplace_back(this->normalization_strategy->get_max_value()); +// this->max_min_inp_val.emplace_back(this->normalization_strategy->get_min_value()); } //TODO check the complete data set for input/output dimensions @@ -58,8 +58,8 @@ namespace lib4neuro { if(ns) { this->normalization_strategy = ns; - this->max_min_inp_val.at(0) = this->normalization_strategy->get_max_value(); - this->max_min_inp_val.at(1) = this->normalization_strategy->get_min_value(); +// this->max_min_inp_val.emplace_back(this->normalization_strategy->get_max_value()); +// this->max_min_inp_val.emplace_back(this->normalization_strategy->get_min_value()); } this->add_isotropic_data(lower_bound, upper_bound, size, output); @@ -78,8 +78,8 @@ namespace lib4neuro { if(ns) { this->normalization_strategy = ns; - this->max_min_inp_val.at(0) = this->normalization_strategy->get_max_value(); - this->max_min_inp_val.at(1) = this->normalization_strategy->get_min_value(); +// this->max_min_inp_val.emplace_back(this->normalization_strategy->get_max_value()); +// this->max_min_inp_val.emplace_back(this->normalization_strategy->get_min_value()); } this->add_isotropic_data(bounds, no_elems_in_one_dim, output_func); @@ -222,12 +222,17 @@ namespace lib4neuro { } void DataSet::normalize() { -// if(this->normalized) { -// throw std::runtime_error("This data set is already normalized!"); -// } + if(!this->normalization_strategy) { + throw std::runtime_error("There is no normalization strategy given for this data set, so it can not be " + "normalized!"); + } /* Find maximum and minimum values */ - this->max_min_inp_val.at(0) = this->max_min_inp_val.at(1) = this->data[0].first.at(0); + if(this->max_min_inp_val.empty()) { + this->max_min_inp_val.emplace_back(this->data.at(0).first.at(0)); + this->max_min_inp_val.emplace_back(this->data.at(0).first.at(0)); + } + double tmp, tmp2; for(auto pair : this->data) { /* Finding maximum */ @@ -294,9 +299,9 @@ namespace lib4neuro { return this->normalization_strategy; } -// bool DataSet::is_normalized() { -// return this->normalized; -// } + bool DataSet::is_normalized() { + return !this->max_min_inp_val.empty(); + } double DataSet::get_max_inp_val() { return this->max_min_inp_val.at(0); diff --git a/src/DataSet/DataSet.h b/src/DataSet/DataSet.h index 0ac929056956e18bd2b42881b220952dcf5f2aa8..e0e040930a4e12a05bb929750b5354bef8342b00 100644 --- a/src/DataSet/DataSet.h +++ b/src/DataSet/DataSet.h @@ -77,7 +77,7 @@ namespace lib4neuro { * */ //TODO let user choose in the constructor! - NormalizationStrategy* normalization_strategy = new DoubleUnitStrategy; + NormalizationStrategy* normalization_strategy = nullptr; //new DoubleUnitStrategy; // /** // * @@ -248,11 +248,11 @@ namespace lib4neuro { */ LIB4NEURO_API NormalizationStrategy* get_normalization_strategy(); -// /** -// * -// * @return -// */ -// LIB4NEURO_API bool is_normalized(); + /** + * + * @return + */ + LIB4NEURO_API bool is_normalized(); /** * diff --git a/src/LearningMethods/GradientDescent.cpp b/src/LearningMethods/GradientDescent.cpp index be320f69e27ae48ec53b8a16943a61e21012601e..a457d0cf65e56889c150dd24592f01aa8fc15040 100644 --- a/src/LearningMethods/GradientDescent.cpp +++ b/src/LearningMethods/GradientDescent.cpp @@ -44,7 +44,7 @@ namespace lib4neuro { void GradientDescent::optimize(lib4neuro::ErrorFunction &ef) { /* Copy data set max and min values, if it's normalized */ - if(!std::isnan(ef.get_dataset()->get_max_inp_val())) { + if(ef.get_dataset()->is_normalized()) { ef.get_network_instance()->set_normalization_strategy_instance( ef.get_dataset()->get_normalization_strategy()); } diff --git a/src/LearningMethods/ParticleSwarm.cpp b/src/LearningMethods/ParticleSwarm.cpp index 7c649f6de2f72912bc600cb7dfe131997515d8f2..5046f4e137646e0669cc65f8a99020e811f34ea8 100644 --- a/src/LearningMethods/ParticleSwarm.cpp +++ b/src/LearningMethods/ParticleSwarm.cpp @@ -258,7 +258,7 @@ namespace lib4neuro { */ void ParticleSwarm::optimize(lib4neuro::ErrorFunction &ef) { /* Copy data set max and min values, if it's normalized */ - if(!std::isnan(ef.get_dataset()->get_max_inp_val())) { + if(ef.get_dataset()->is_normalized()) { ef.get_network_instance()->set_normalization_strategy_instance( ef.get_dataset()->get_normalization_strategy()); } diff --git a/src/NormalizationStrategy/NormalizationStrategy.cpp b/src/NormalizationStrategy/NormalizationStrategy.cpp index 9ca3b04e3b2eca68f0d95550d56d49e1a5b80688..32f475cac58d5323c93d34178f5d8a34f53c278e 100644 --- a/src/NormalizationStrategy/NormalizationStrategy.cpp +++ b/src/NormalizationStrategy/NormalizationStrategy.cpp @@ -23,8 +23,13 @@ double NormalizationStrategy::get_min_value() { DoubleUnitStrategy::DoubleUnitStrategy() {} double DoubleUnitStrategy::normalize(double n, double max, double min) { - this->max_min_inp_val.at(0) = max; - this->max_min_inp_val.at(1) = min; + if(this->max_min_inp_val.empty()) { + this->max_min_inp_val.emplace_back(max); + this->max_min_inp_val.emplace_back(min); + } else { + this->max_min_inp_val.at(0) = max; + this->max_min_inp_val.at(1) = min; + } return 2*(n - min)/(max - min) - 1; }