diff --git a/data/iris.mlp b/data/iris.mlp index 77badc2..dce3f72 100644 Binary files a/data/iris.mlp and b/data/iris.mlp differ diff --git a/src/Layer.h b/src/Layer.h index a6efa01..8a36bfd 100644 --- a/src/Layer.h +++ b/src/Layer.h @@ -5,9 +5,6 @@ #ifndef LAYER_H #define LAYER_H -#include "Utils.h" -#include "Node.h" - #include #include #include @@ -16,6 +13,8 @@ #include #include #include // for assert() +#include "Node.h" +#include "Utils.h" class Layer { public: @@ -82,7 +81,7 @@ public: output->resize(m_num_nodes); - for (int i = 0; i < m_num_nodes; ++i) { + for (size_t i = 0; i < m_num_nodes; ++i) { m_nodes[i].GetOutputAfterActivationFunction(input, m_activation_function, &((*output)[i])); @@ -111,7 +110,7 @@ public: dE_doj = deriv_error[i]; doj_dnetj = m_deriv_activation_function(net_sum); - for (int j = 0; j < m_num_inputs_per_node; j++) { + for (size_t j = 0; j < m_num_inputs_per_node; j++) { (*deltas)[j] += dE_doj * doj_dnetj * m_nodes[i].GetWeights()[j]; dnetj_dwij = input_layer_activation[j]; @@ -180,8 +179,8 @@ public: }; protected: - int m_num_inputs_per_node{ 0 }; - int m_num_nodes{ 0 }; + size_t m_num_inputs_per_node{ 0 }; + size_t m_num_nodes{ 0 }; std::vector m_nodes; std::string m_activation_function_str; diff --git a/src/MLP.cpp b/src/MLP.cpp index ca54320..4770edc 100644 --- a/src/MLP.cpp +++ b/src/MLP.cpp @@ -3,6 +3,7 @@ // Author : David Nogueira //============================================================================ #include "MLP.h" + #include #include #include @@ -10,6 +11,7 @@ #include #include #include + #include "easylogging++.h" diff --git a/src/MLP.h b/src/MLP.h index 2a1cc5e..551f0fe 100644 --- a/src/MLP.h +++ b/src/MLP.h @@ -5,10 +5,6 @@ #ifndef MLP_H #define MLP_H -#include "Layer.h" -#include "Sample.h" -#include "Utils.h" - #include #include #include @@ -17,6 +13,9 @@ #include #include #include +#include "Layer.h" +#include "Sample.h" +#include "Utils.h" class MLP { public: @@ -54,7 +53,7 @@ private: const std::vector & layers_activfuncs, bool use_constant_weight_init, double constant_weight_init = 0.5); - int m_num_inputs{ 0 }; + size_t m_num_inputs{ 0 }; int m_num_outputs{ 0 }; int m_num_hidden_layers{ 0 }; std::vector m_layers_nodes; diff --git a/src/MLPTest.cpp b/src/MLPTest.cpp index ad237f7..3fb0c07 100644 --- a/src/MLPTest.cpp +++ b/src/MLPTest.cpp @@ -347,6 +347,17 @@ UNIT(GetWeightsSetWeights) { // get layer weights std::vector> weights = my_mlp.GetLayerWeights( 1 ); + for (const auto & training_sample : training_sample_set_with_bias) { + std::vector output; + my_mlp.GetOutput(training_sample.input_vector(), &output); + for (size_t i = 0; i < num_outputs; i++) { + bool predicted_output = output[i] > 0.5 ? true : false; + std::cout << "PREDICTED OUTPUT IS NOW: " << output[i] << std::endl; + bool correct_output = training_sample.output_vector()[i] > 0.5 ? true : false; + ASSERT_TRUE(predicted_output == correct_output); + } + } + // the expected value of the internal weights // after training are 1.65693 -0.538749 ASSERT_TRUE( 1.6 <= weights[0][0] && weights[0][0] <= 1.7 ); @@ -358,24 +369,14 @@ UNIT(GetWeightsSetWeights) { my_mlp.SetLayerWeights( 1, zeroWeights ); - /* - * - * PREDICTED OUTPUT IS NOW: 0.335394 -PREDICTED OUTPUT IS NOW: 1.13887 -PREDICTED OUTPUT IS NOW: 0.180468 -PREDICTED OUTPUT IS NOW: 1.00535 - * - */ for (const auto & training_sample : training_sample_set_with_bias) { std::vector output; my_mlp.GetOutput(training_sample.input_vector(), &output); for (size_t i = 0; i < num_outputs; i++) { - bool predicted_output = output[i] > 0.5 ? true : false; - std::cout << "PREDICTED OUTPUT IS NOW: " << output[i] << std::endl; - bool correct_output = training_sample.output_vector()[i] > 0.5 ? true : false; - ASSERT_TRUE(predicted_output == correct_output); + ASSERT_TRUE( -0.0001L <= output[i] && output[i] <= 0.0001L ); } } + LOG(INFO) << "Trained with success." << std::endl; } diff --git a/src/Node.h b/src/Node.h index d145d51..2fea944 100644 --- a/src/Node.h +++ b/src/Node.h @@ -5,8 +5,6 @@ #ifndef NODE_H #define NODE_H -#include "Utils.h" - #include #include #include @@ -16,6 +14,7 @@ #include #include // for assert() #include +#include "Utils.h" #define CONSTANT_WEIGHT_INITIALIZATION 0 @@ -150,7 +149,7 @@ public: }; protected: - int m_num_inputs{ 0 }; + size_t m_num_inputs{ 0 }; double m_bias{ 0.0 }; std::vector m_weights; }; diff --git a/src/Utils.h b/src/Utils.h index 9a8eb30..229d04b 100644 --- a/src/Utils.h +++ b/src/Utils.h @@ -5,7 +5,6 @@ #ifndef UTILS_H #define UTILS_H -#include "Chrono.h" #include #include #include @@ -22,6 +21,8 @@ #include #include #include + +#include "Chrono.h" #ifdef _WIN32 #include #else