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