From 2a28e0ddd61918de78fc1f732a8e97d1a84a9e8d Mon Sep 17 00:00:00 2001 From: Martin Beseda <martinbeseda@seznam.cz> Date: Mon, 13 Aug 2018 10:04:02 +0200 Subject: [PATCH] ENH: Implemented serialization for Neuron classes. --- src/Neuron/Neuron.cpp | 5 ----- src/Neuron/Neuron.h | 14 +++----------- src/Neuron/NeuronBinary.cpp | 4 +--- src/Neuron/NeuronBinary.h | 3 +-- src/Neuron/NeuronConstant.cpp | 2 -- src/Neuron/NeuronConstant.h | 10 ++++++---- src/Neuron/NeuronLinear.cpp | 5 +---- src/Neuron/NeuronLinear.h | 3 +-- src/Neuron/NeuronLogistic.cpp | 12 +++--------- src/Neuron/NeuronLogistic.h | 10 +++++++--- 10 files changed, 23 insertions(+), 45 deletions(-) diff --git a/src/Neuron/Neuron.cpp b/src/Neuron/Neuron.cpp index fc7dc78d..15664cd9 100644 --- a/src/Neuron/Neuron.cpp +++ b/src/Neuron/Neuron.cpp @@ -4,8 +4,3 @@ Neuron::~Neuron() { } -//template<class Archive> -//void Neuron::serialize(Archive & ar, const unsigned int version) { -// ar << this->potential; -// ar << this->state; -//} \ No newline at end of file diff --git a/src/Neuron/Neuron.h b/src/Neuron/Neuron.h index 6e098a85..bcc85cf4 100644 --- a/src/Neuron/Neuron.h +++ b/src/Neuron/Neuron.h @@ -19,20 +19,11 @@ class IDifferentiable; * Abstract class representing a general neuron */ class Neuron { +private: friend class boost::serialization::access; -protected: - template<class Archive> - void serialize(Archive & ar, const unsigned int version){ - //TODO separate implementation to Neuron.cpp! -// ar & this->potential; -// ar & this->state; -// -// for(unsigned short int i = 0; i < this->n_activation_function_parameters; i++) { -// ar & this->activation_function_parameters[i]; -// } - }; + void serialize(Archive & ar, const unsigned int version){}; public: @@ -47,6 +38,7 @@ public: * Performs the activation function and returns the result */ virtual double activate( double x, double b ) = 0; + }; /* end of Neuron class */ diff --git a/src/Neuron/NeuronBinary.cpp b/src/Neuron/NeuronBinary.cpp index 4ccb178b..48ada48f 100644 --- a/src/Neuron/NeuronBinary.cpp +++ b/src/Neuron/NeuronBinary.cpp @@ -4,9 +4,7 @@ #include "NeuronBinary.h" -NeuronBinary::NeuronBinary( ) { - -} +NeuronBinary::NeuronBinary( ) {} double NeuronBinary::activate( double x, double b ) { diff --git a/src/Neuron/NeuronBinary.h b/src/Neuron/NeuronBinary.h index 9e2d1161..e9857a7a 100644 --- a/src/Neuron/NeuronBinary.h +++ b/src/Neuron/NeuronBinary.h @@ -16,12 +16,11 @@ * Binary neuron class - uses unit-step as the activation function */ class NeuronBinary:public Neuron { +private: friend class boost::serialization::access; -protected: template<class Archive> void serialize(Archive & ar, const unsigned int version){ - //TODO separate implementation to NeuronLogistic.cpp! ar & boost::serialization::base_object<Neuron>(*this); }; diff --git a/src/Neuron/NeuronConstant.cpp b/src/Neuron/NeuronConstant.cpp index a09fe8c5..1b349c2f 100644 --- a/src/Neuron/NeuronConstant.cpp +++ b/src/Neuron/NeuronConstant.cpp @@ -8,9 +8,7 @@ #include "NeuronConstant.h" NeuronConstant::NeuronConstant( double c ) { - this->p = c; - } double NeuronConstant::activate( double x, double b ) { diff --git a/src/Neuron/NeuronConstant.h b/src/Neuron/NeuronConstant.h index f87d5a60..2c7091dc 100644 --- a/src/Neuron/NeuronConstant.h +++ b/src/Neuron/NeuronConstant.h @@ -12,13 +12,16 @@ #include "Neuron.h" class NeuronConstant: public Neuron, public IDifferentiable { +private: friend class boost::serialization::access; -protected: + double p = 0.0; + template<class Archive> void serialize(Archive & ar, const unsigned int version){ - //TODO separate implementation to NeuronLinear.cpp! ar & boost::serialization::base_object<Neuron>(*this); + + ar & this->p; }; public: @@ -54,7 +57,6 @@ public: * @return */ Neuron* get_derivative( ) override; -private: - double p = 0.0; }; + #endif //INC_4NEURO_NEURONCONSTANT_H diff --git a/src/Neuron/NeuronLinear.cpp b/src/Neuron/NeuronLinear.cpp index 71ad80fd..afb73c6a 100644 --- a/src/Neuron/NeuronLinear.cpp +++ b/src/Neuron/NeuronLinear.cpp @@ -6,10 +6,7 @@ -NeuronLinear::NeuronLinear( ) { - - -} +NeuronLinear::NeuronLinear( ) {} double NeuronLinear::activate( double x, double b ) { diff --git a/src/Neuron/NeuronLinear.h b/src/Neuron/NeuronLinear.h index bd5d8c42..56d97932 100644 --- a/src/Neuron/NeuronLinear.h +++ b/src/Neuron/NeuronLinear.h @@ -20,12 +20,11 @@ * 'x' being the neuron's potential */ class NeuronLinear:public Neuron, public IDifferentiable { +private: friend class boost::serialization::access; -protected: template<class Archive> void serialize(Archive & ar, const unsigned int version){ - //TODO separate implementation to NeuronLinear.cpp! ar & boost::serialization::base_object<Neuron>(*this); }; diff --git a/src/Neuron/NeuronLogistic.cpp b/src/Neuron/NeuronLogistic.cpp index 7d8075bc..6ca3f800 100644 --- a/src/Neuron/NeuronLogistic.cpp +++ b/src/Neuron/NeuronLogistic.cpp @@ -5,9 +5,7 @@ #include "NeuronLogistic.h" -NeuronLogistic_d2::NeuronLogistic_d2( ) { - -} +NeuronLogistic_d2::NeuronLogistic_d2( ) {} double NeuronLogistic_d2::activate( double x, double b ) { //(e^(b + x) (e^b - e^x))/(e^b + e^x)^3 @@ -40,9 +38,7 @@ NeuronLogistic* NeuronLogistic_d2::get_derivative() { return nullptr; } -NeuronLogistic_d1::NeuronLogistic_d1( ) { - -} +NeuronLogistic_d1::NeuronLogistic_d1( ) {} double NeuronLogistic_d1::activate( double x, double b ) { @@ -80,9 +76,7 @@ NeuronLogistic* NeuronLogistic_d1::get_derivative( ) { return output; } -NeuronLogistic::NeuronLogistic( ) { - -} +NeuronLogistic::NeuronLogistic( ) {} double NeuronLogistic::activate( double x, double b ) { //(1 + e^(-x + b))^(-1) diff --git a/src/Neuron/NeuronLogistic.h b/src/Neuron/NeuronLogistic.h index 9eaa3e2b..c5ce9d9e 100644 --- a/src/Neuron/NeuronLogistic.h +++ b/src/Neuron/NeuronLogistic.h @@ -59,13 +59,15 @@ public: class NeuronLogistic_d1:public NeuronLogistic { +private: friend class boost::serialization::access; -protected: + template<class Archive> void serialize(Archive & ar, const unsigned int version){ - //TODO separate implementation to NeuronLogistic_d1.cpp! + //TODO separate implementation to Neuronogistic_d1.cpp! ar & boost::serialization::base_object<Neuron>(*this); }; + public: /** @@ -106,13 +108,15 @@ public: class NeuronLogistic_d2:public NeuronLogistic_d1 { +private: friend class boost::serialization::access; -protected: + template<class Archive> void serialize(Archive & ar, const unsigned int version){ //TODO separate implementation to NeuronLogistic_d1.cpp! ar & boost::serialization::base_object<Neuron>(*this); }; + public: /** -- GitLab