diff --git a/examples/adder.net b/examples/adder.net
deleted file mode 100644
index 17cde54..0000000
Binary files a/examples/adder.net and /dev/null differ
diff --git a/include/neural++.hpp b/include/neural++.hpp
index e915dca..ad4f2c3 100644
--- a/include/neural++.hpp
+++ b/include/neural++.hpp
@@ -225,34 +225,39 @@ namespace neuralpp {
Neuron *in;
Neuron *out;
+ NeuralNet *net;
double (*actv_f)(double);
double (*deriv)(double);
public:
- Synapsis(Neuron* i, Neuron* o, double w, double d) {
+ Synapsis(Neuron* i, Neuron* o, NeuralNet* n, double w, double d) {
in=i; out=o;
weight=w; delta=d;
+ net=n;
}
/**
* @brief Constructor
* @param i Input neuron
* @param o Output neuron
+ * @param n Reference to the neural network
* @param a Activation function
* @param d Derivate for activation function
*/
- Synapsis (Neuron* i, Neuron* o, double(*)(double), double(*)(double));
+ Synapsis (Neuron* i, Neuron* o, NeuralNet* n, double(*a)(double), double(*d)(double));
/**
* @brief Constructor
* @param i Input neuron
* @param o Output neuron
+ * @param n Reference to the neural network
* @param w Weight for the synapsis (default: random)
* @param a Activation function
* @param d Derivate for activation function
*/
- Synapsis (Neuron* i, Neuron* o, double w, double(*)(double), double(*)(double));
+ Synapsis (Neuron* i, Neuron* o, NeuralNet* n,
+ double w, double(*a)(double), double(*d)(double));
/**
* @return Reference to input neuron of the synapsis
@@ -381,8 +386,9 @@ namespace neuralpp {
*/
class Layer {
vector< Neuron > elements;
- void (*update_weights)();
+ NeuralNet *net;
+ void (*update_weights)();
double (*actv_f)(double);
double (*deriv)(double);
@@ -390,16 +396,17 @@ namespace neuralpp {
/**
* @brief Constructor
* @param sz Size of the layer
+ * @param n Reference to the neural network
* @param a Activation function
* @param d Its derivate
*/
- Layer (size_t sz, double (*)(double), double(*)(double));
+ Layer (size_t sz, NeuralNet* n, double (*a)(double), double(*d)(double));
/**
* @brief Alternative constructor. It directly gets a vector of neurons to build
* the layer
*/
- Layer (vector< Neuron >&, double(*)(double), double(*)(double));
+ Layer (vector< Neuron >&, NeuralNet* net, double(*a)(double), double(*d)(double));
/**
* @brief Redefinition for operator []. It gets the neuron at i
diff --git a/src/layer.cpp b/src/layer.cpp
index 46de72d..635bcf1 100644
--- a/src/layer.cpp
+++ b/src/layer.cpp
@@ -21,7 +21,7 @@ using namespace neuralpp;
* @param a Activation function
* @param d Its derivate
*/
-Layer::Layer (size_t sz, double(*a)(double), double(*d)(double)) {
+Layer::Layer (size_t sz, NeuralNet* n, double(*a)(double), double(*d)(double)) {
for (size_t i=0; i &el, double (*a)(double), double(*d)(double)) {
+Layer::Layer (vector< Neuron > &el, NeuralNet* n, double (*a)(double), double(*d)(double)) {
elements=el;
actv_f=a;
deriv=d;
+ net=n;
}
/**
@@ -63,7 +65,7 @@ void Layer::link (Layer& l) {
for (size_t j=0; jpush_out(s);
n2->push_in(s);
diff --git a/src/neuralnet.cpp b/src/neuralnet.cpp
index 5f6ac33..18afe89 100644
--- a/src/neuralnet.cpp
+++ b/src/neuralnet.cpp
@@ -43,9 +43,9 @@ NeuralNet::NeuralNet (size_t in_size, size_t hidden_size, size_t out_size, doubl
actv_f=__actv;
deriv=__deriv;
- input = new Layer(in_size, __actv, __deriv);
- hidden = new Layer(hidden_size, __actv, __deriv);
- output = new Layer(out_size, __actv, __deriv);
+ input = new Layer(in_size, this, __actv, __deriv);
+ hidden = new Layer(hidden_size, this, __actv, __deriv);
+ output = new Layer(out_size, this, __actv, __deriv);
link();
}
@@ -70,9 +70,9 @@ NeuralNet::NeuralNet (size_t in_size, size_t hidden_size, size_t out_size,
actv_f=a;
deriv=d;
- input = new Layer(in_size,a,d);
- hidden = new Layer(hidden_size,a,d);
- output = new Layer(out_size,a,d);
+ input = new Layer(in_size, this, a, d);
+ hidden = new Layer(hidden_size, this, a, d);
+ output = new Layer(out_size, this, a, d);
link();
}
diff --git a/src/synapsis.cpp b/src/synapsis.cpp
index 89d10e5..fa4ee8e 100644
--- a/src/synapsis.cpp
+++ b/src/synapsis.cpp
@@ -15,14 +15,7 @@
#include "neural++.hpp"
using namespace neuralpp;
-/**
- * @brief Constructor
- * @param i Input neuron
- * @param o Output neuron
- * @param a Activation function
- * @param d Derivate for activation function
- */
-Synapsis::Synapsis (Neuron* i, Neuron* o, double(*a)(double), double(*d)(double)) {
+Synapsis::Synapsis (Neuron* i, Neuron* o, NeuralNet* n, double(*a)(double), double(*d)(double)) {
srand((unsigned) time(NULL));
delta=0;
@@ -32,6 +25,7 @@ Synapsis::Synapsis (Neuron* i, Neuron* o, double(*a)(double), double(*d)(double)
actv_f=a;
deriv=d;
+ net=n;
}
/**
@@ -42,7 +36,8 @@ Synapsis::Synapsis (Neuron* i, Neuron* o, double(*a)(double), double(*d)(double)
* @param a Activation function
* @param d Derivate for activation function
*/
-Synapsis::Synapsis (Neuron* i, Neuron* o, double w, double(*a)(double), double(*d)(double)) {
+Synapsis::Synapsis (Neuron* i, Neuron* o, NeuralNet* n,
+ double w, double(*a)(double), double(*d)(double)) {
delta=0;
weight=w;
in=i;
@@ -50,6 +45,7 @@ Synapsis::Synapsis (Neuron* i, Neuron* o, double w, double(*a)(double), double(*
actv_f=a;
deriv=d;
+ net=n;
}
/**