diff options
Diffstat (limited to '')
-rw-r--r-- | default.bld | 9 | ||||
l--------- | neural | 1 | ||||
-rw-r--r-- | src/column.cpp | 0 | ||||
-rw-r--r-- | src/column.h | 0 | ||||
-rw-r--r-- | src/container.cpp | 5 | ||||
-rw-r--r-- | src/container.h | 46 | ||||
-rw-r--r-- | src/network.cpp | 0 | ||||
-rw-r--r-- | src/network.h | 0 | ||||
-rw-r--r-- | src/neuron.cpp | 5 | ||||
-rw-r--r-- | src/neuron.h | 71 | ||||
-rw-r--r-- | src/node.cpp | 5 | ||||
-rw-r--r-- | src/node.h | 29 | ||||
-rw-r--r-- | src/row.cpp | 5 | ||||
-rw-r--r-- | src/row.h | 81 | ||||
-rw-r--r-- | src/slope.cpp | 1 | ||||
-rw-r--r-- | src/slope.h | 22 | ||||
-rw-r--r-- | src/slopestd.cpp | 5 | ||||
-rw-r--r-- | src/slopestd.h | 55 |
18 files changed, 340 insertions, 0 deletions
diff --git a/default.bld b/default.bld new file mode 100644 index 0000000..be99b23 --- /dev/null +++ b/default.bld | |||
@@ -0,0 +1,9 @@ | |||
1 | target "libneural.a" | ||
2 | { | ||
3 | rule "lib"; | ||
4 | input files("src/*.cpp"); | ||
5 | |||
6 | CXXFLAGS += "-I."; | ||
7 | LDCONFIG += "-lbu++"; | ||
8 | } | ||
9 | |||
@@ -0,0 +1 @@ | |||
src \ No newline at end of file | |||
diff --git a/src/column.cpp b/src/column.cpp new file mode 100644 index 0000000..e69de29 --- /dev/null +++ b/src/column.cpp | |||
diff --git a/src/column.h b/src/column.h new file mode 100644 index 0000000..e69de29 --- /dev/null +++ b/src/column.h | |||
diff --git a/src/container.cpp b/src/container.cpp new file mode 100644 index 0000000..00e7cad --- /dev/null +++ b/src/container.cpp | |||
@@ -0,0 +1,5 @@ | |||
1 | #include "neural/container.h" | ||
2 | |||
3 | template class Neural::Container<float>; | ||
4 | template class Neural::Container<double>; | ||
5 | template class Neural::Container<long double>; | ||
diff --git a/src/container.h b/src/container.h new file mode 100644 index 0000000..d9eeffd --- /dev/null +++ b/src/container.h | |||
@@ -0,0 +1,46 @@ | |||
1 | #ifndef NEURAL_CONTAINER_H | ||
2 | #define NEURAL_CONTAINER_H | ||
3 | |||
4 | #include "neural/node.h" | ||
5 | #include <bu/list.h> | ||
6 | |||
7 | namespace Neural | ||
8 | { | ||
9 | template<typename sigtype> | ||
10 | class Container : public Node<sigtype> | ||
11 | { | ||
12 | public: | ||
13 | typedef Bu::List<Neural::Node<sigtype> *> NodeList; | ||
14 | |||
15 | Container() | ||
16 | { | ||
17 | } | ||
18 | |||
19 | virtual ~Container() | ||
20 | { | ||
21 | for( typename NodeList::iterator i = lNodes.begin(); i; i++ ) | ||
22 | delete *i; | ||
23 | } | ||
24 | |||
25 | virtual void addNode( Node<sigtype> *pNode ) | ||
26 | { | ||
27 | lNodes.append( pNode ); | ||
28 | } | ||
29 | |||
30 | virtual const NodeList &getNodeList() const | ||
31 | { | ||
32 | return lNodes; | ||
33 | } | ||
34 | |||
35 | protected: | ||
36 | virtual NodeList &getNodeList() | ||
37 | { | ||
38 | return lNodes; | ||
39 | } | ||
40 | |||
41 | private: | ||
42 | NodeList lNodes; | ||
43 | }; | ||
44 | }; | ||
45 | |||
46 | #endif | ||
diff --git a/src/network.cpp b/src/network.cpp new file mode 100644 index 0000000..e69de29 --- /dev/null +++ b/src/network.cpp | |||
diff --git a/src/network.h b/src/network.h new file mode 100644 index 0000000..e69de29 --- /dev/null +++ b/src/network.h | |||
diff --git a/src/neuron.cpp b/src/neuron.cpp new file mode 100644 index 0000000..a951b45 --- /dev/null +++ b/src/neuron.cpp | |||
@@ -0,0 +1,5 @@ | |||
1 | #include "neural/neuron.h" | ||
2 | |||
3 | template class Neural::Neuron<float>; | ||
4 | template class Neural::Neuron<double>; | ||
5 | template class Neural::Neuron<long double>; | ||
diff --git a/src/neuron.h b/src/neuron.h new file mode 100644 index 0000000..dc30471 --- /dev/null +++ b/src/neuron.h | |||
@@ -0,0 +1,71 @@ | |||
1 | #ifndef NEURAL_NEURON_H | ||
2 | #define NEURAL_NEURON_H | ||
3 | |||
4 | #include "neural/node.h" | ||
5 | #include "neural/slope.h" | ||
6 | |||
7 | namespace Neural | ||
8 | { | ||
9 | template<typename sigtype> | ||
10 | class Neuron : public Node<sigtype> | ||
11 | { | ||
12 | public: | ||
13 | Neuron() : | ||
14 | iInputs( 0 ), | ||
15 | aWeights( 0 ), | ||
16 | sBias( 0.0 ), | ||
17 | pSlope( 0 ) | ||
18 | { | ||
19 | } | ||
20 | |||
21 | virtual ~Neuron() | ||
22 | { | ||
23 | delete[] aWeights; | ||
24 | delete pSlope; | ||
25 | } | ||
26 | |||
27 | virtual void finalize( int iNumInputs ) | ||
28 | { | ||
29 | iInputs = iNumInputs; | ||
30 | aWeights = new sigtype[iInputs]; | ||
31 | } | ||
32 | |||
33 | virtual void process( sigtype *aInput, sigtype *aOutput ) | ||
34 | { | ||
35 | sigtype sOutput = sBias; | ||
36 | for( int j = 0; j < iInputs; j++ ) | ||
37 | { | ||
38 | sOutput += aWeights[j] * aInput[j]; | ||
39 | } | ||
40 | *aOutput = (*pSlope)( sOutput ); | ||
41 | } | ||
42 | |||
43 | virtual int getNumInputs() const | ||
44 | { | ||
45 | return iInputs; | ||
46 | } | ||
47 | |||
48 | virtual int getNumOutputs() const | ||
49 | { | ||
50 | return 1; | ||
51 | } | ||
52 | |||
53 | virtual int getNumWeights() const | ||
54 | { | ||
55 | return iInputs; | ||
56 | } | ||
57 | |||
58 | virtual int getNumBiases() const | ||
59 | { | ||
60 | return 1; | ||
61 | } | ||
62 | |||
63 | private: | ||
64 | int iInputs; | ||
65 | sigtype *aWeights; | ||
66 | sigtype sBias; | ||
67 | Slope<sigtype> *pSlope; | ||
68 | }; | ||
69 | }; | ||
70 | |||
71 | #endif | ||
diff --git a/src/node.cpp b/src/node.cpp new file mode 100644 index 0000000..1a02875 --- /dev/null +++ b/src/node.cpp | |||
@@ -0,0 +1,5 @@ | |||
1 | #include "neural/node.h" | ||
2 | |||
3 | template class Neural::Node<float>; | ||
4 | template class Neural::Node<double>; | ||
5 | template class Neural::Node<long double>; | ||
diff --git a/src/node.h b/src/node.h new file mode 100644 index 0000000..fe2b720 --- /dev/null +++ b/src/node.h | |||
@@ -0,0 +1,29 @@ | |||
1 | #ifndef NEURAL_NODE_H | ||
2 | #define NEURAL_NODE_H | ||
3 | |||
4 | namespace Neural | ||
5 | { | ||
6 | template<typename sigtype> | ||
7 | class Node | ||
8 | { | ||
9 | public: | ||
10 | Node() | ||
11 | { | ||
12 | } | ||
13 | |||
14 | virtual ~Node() | ||
15 | { | ||
16 | } | ||
17 | |||
18 | virtual void finalize( int iNumInputs )=0; | ||
19 | virtual void process( sigtype *aInput, sigtype *aOutput )=0; | ||
20 | |||
21 | virtual int getNumInputs() const=0; | ||
22 | virtual int getNumOutputs() const=0; | ||
23 | virtual int getNumWeights() const=0; | ||
24 | virtual int getNumBiases() const=0; | ||
25 | }; | ||
26 | }; | ||
27 | |||
28 | #endif | ||
29 | |||
diff --git a/src/row.cpp b/src/row.cpp new file mode 100644 index 0000000..ea050d2 --- /dev/null +++ b/src/row.cpp | |||
@@ -0,0 +1,5 @@ | |||
1 | #include "neural/row.h" | ||
2 | |||
3 | template class Neural::Row<float>; | ||
4 | template class Neural::Row<double>; | ||
5 | template class Neural::Row<long double>; | ||
diff --git a/src/row.h b/src/row.h new file mode 100644 index 0000000..0ec5dde --- /dev/null +++ b/src/row.h | |||
@@ -0,0 +1,81 @@ | |||
1 | #ifndef NEURAL_ROW_H | ||
2 | #define NEURAL_ROW_H | ||
3 | |||
4 | #include "neural/container.h" | ||
5 | |||
6 | namespace Neural | ||
7 | { | ||
8 | template<typename sigtype> | ||
9 | class Row : public Container<sigtype> | ||
10 | { | ||
11 | public: | ||
12 | //typedef Bu::List<Neural::Node<sigtype> *> NodeList; | ||
13 | Row() : | ||
14 | iInputs( 0 ), | ||
15 | iOutputs( 0 ), | ||
16 | iWeights( 0 ), | ||
17 | iBiases( 0 ) | ||
18 | { | ||
19 | } | ||
20 | |||
21 | virtual ~Row() | ||
22 | { | ||
23 | } | ||
24 | |||
25 | virtual void finalize( int iNumInputs ) | ||
26 | { | ||
27 | iInputs = iNumInputs; | ||
28 | iOutputs = 0; | ||
29 | iWeights = 0; | ||
30 | iBiases = 0; | ||
31 | |||
32 | for( typename Container<sigtype>::NodeList::iterator i = | ||
33 | Container<sigtype>::getNodeList().begin(); i; i++ ) | ||
34 | { | ||
35 | (*i)->finalize( iInputs ); | ||
36 | iOutputs += (*i)->getNumOutputs(); | ||
37 | iWeights += (*i)->getNumWeights(); | ||
38 | iBiases += (*i)->getNumBiases(); | ||
39 | } | ||
40 | } | ||
41 | |||
42 | virtual void process( sigtype *aInput, sigtype *aOutput ) | ||
43 | { | ||
44 | int iOutputOffset = 0; | ||
45 | for( typename Container<sigtype>::NodeList::iterator i = | ||
46 | Container<sigtype>::getNodeList().begin(); i; i++ ) | ||
47 | { | ||
48 | (*i)->process( aInput, aOutput+iOutputOffset ); | ||
49 | iOutputOffset += (*i)->getNumOutputs(); | ||
50 | } | ||
51 | } | ||
52 | |||
53 | virtual int getNumInputs() const | ||
54 | { | ||
55 | return iInputs; | ||
56 | } | ||
57 | |||
58 | virtual int getNumOutputs() const | ||
59 | { | ||
60 | return iOutputs; | ||
61 | } | ||
62 | |||
63 | virtual int getNumWeights() const | ||
64 | { | ||
65 | return iWeights; | ||
66 | } | ||
67 | |||
68 | virtual int getNumBiases() const | ||
69 | { | ||
70 | return iBiases; | ||
71 | } | ||
72 | |||
73 | private: | ||
74 | int iInputs; | ||
75 | int iOutputs; | ||
76 | int iWeights; | ||
77 | int iBiases; | ||
78 | }; | ||
79 | }; | ||
80 | |||
81 | #endif | ||
diff --git a/src/slope.cpp b/src/slope.cpp new file mode 100644 index 0000000..5b380af --- /dev/null +++ b/src/slope.cpp | |||
@@ -0,0 +1 @@ | |||
#include "neural/slope.h" | |||
diff --git a/src/slope.h b/src/slope.h new file mode 100644 index 0000000..acdbb41 --- /dev/null +++ b/src/slope.h | |||
@@ -0,0 +1,22 @@ | |||
1 | #ifndef NEURAL_SLOPE_H | ||
2 | #define NEURAL_SLOPE_H | ||
3 | |||
4 | namespace Neural | ||
5 | { | ||
6 | template<typename sigtype> | ||
7 | class Slope | ||
8 | { | ||
9 | public: | ||
10 | Slope() | ||
11 | { | ||
12 | } | ||
13 | |||
14 | virtual ~Slope() | ||
15 | { | ||
16 | } | ||
17 | |||
18 | virtual sigtype operator()( sigtype sInput )=0; | ||
19 | }; | ||
20 | }; | ||
21 | |||
22 | #endif | ||
diff --git a/src/slopestd.cpp b/src/slopestd.cpp new file mode 100644 index 0000000..16b2be4 --- /dev/null +++ b/src/slopestd.cpp | |||
@@ -0,0 +1,5 @@ | |||
1 | #include "neural/slopestd.h" | ||
2 | |||
3 | template class Neural::SlopeStd<float>; | ||
4 | template class Neural::SlopeStd<double>; | ||
5 | template class Neural::SlopeStd<long double>; | ||
diff --git a/src/slopestd.h b/src/slopestd.h new file mode 100644 index 0000000..40ceef2 --- /dev/null +++ b/src/slopestd.h | |||
@@ -0,0 +1,55 @@ | |||
1 | #ifndef NEURAL_SLOPE_STD_H | ||
2 | #define NEURAL_SLOPE_STD_H | ||
3 | |||
4 | #include <math.h> | ||
5 | |||
6 | #include "neural/slope.h" | ||
7 | |||
8 | namespace Neural | ||
9 | { | ||
10 | template<typename sigtype> | ||
11 | sigtype tpltanh( sigtype sInput ); | ||
12 | |||
13 | template<> | ||
14 | float tpltanh<float>( float sInput ) | ||
15 | { | ||
16 | return tanhf( sInput ); | ||
17 | } | ||
18 | |||
19 | template<> | ||
20 | double tpltanh<double>( double sInput ) | ||
21 | { | ||
22 | return tanh( sInput ); | ||
23 | } | ||
24 | |||
25 | template<> | ||
26 | long double tpltanh<long double>( long double sInput ) | ||
27 | { | ||
28 | return tanhl( sInput ); | ||
29 | } | ||
30 | |||
31 | template<typename sigtype> | ||
32 | class SlopeStd : public Slope<sigtype> | ||
33 | { | ||
34 | public: | ||
35 | SlopeStd( sigtype sSlope=1.0 ) : | ||
36 | sSlope( sSlope ) | ||
37 | { | ||
38 | } | ||
39 | |||
40 | virtual ~SlopeStd() | ||
41 | { | ||
42 | } | ||
43 | |||
44 | virtual sigtype operator()( sigtype sInput ) | ||
45 | { | ||
46 | return (tpltanh<sigtype>(2.0*sSlope*sInput) + 1.0)/2.0; | ||
47 | } | ||
48 | |||
49 | private: | ||
50 | sigtype sSlope; | ||
51 | }; | ||
52 | }; | ||
53 | |||
54 | #endif | ||
55 | |||