From 006bf64c74300a74e9aff4457e6a6462b5ac7b03 Mon Sep 17 00:00:00 2001 From: blacklight Date: Sat, 8 Aug 2009 19:11:06 +0200 Subject: [PATCH] The reference to the network is passed in Layer and Synapsis objects --- examples/adder.net | Bin 332 -> 0 bytes include/neural++.hpp | 19 +++++++++++++------ src/layer.cpp | 8 +++++--- src/neuralnet.cpp | 12 ++++++------ src/synapsis.cpp | 14 +++++--------- 5 files changed, 29 insertions(+), 24 deletions(-) delete mode 100644 examples/adder.net diff --git a/examples/adder.net b/examples/adder.net deleted file mode 100644 index 17cde54ff77d1b00fb4895a01d7dc7495adf757f..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 332 zcmZQ#U|?VZVn!eqP-kGM7Fp;1u&Tr!$Yo$~2zCI|4GyR@gByeoq!lZ!h?TAKgwx6Q z6!p@%0vup;gw(a42mOK_U^K`sAUJSx<^_ly5Prj=ukYb}s2T?^X@nS1Swr&1XDDix z)So)KvISwz&AVo)pI;#KfXrFn7BS-%l3ia?oF0WCnF~^r@lNpFAtd{!J(W_Of@Bvc OY=8j8%}_BEcLM;|@krVL 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; } /**