learn - not yet implemented, test does not yet work
This commit is contained in:
@@ -167,6 +167,7 @@
|
||||
@page biblio Bibliography
|
||||
|
||||
- <a href="http://briandolhansky.com/blog/2014/10/30/artificial-neural-networks-matrix-form-part-5">Artificial Neural Networks: Matrix Form (Part 5)</a>
|
||||
- <a href="http://briandolhansky.com/blog/2013/9/27/artificial-neural-networks-backpropagation-part-4">Artificial Neural Networks: Mathematics of Backpropagation (Part 4)</a>
|
||||
- <a href="http://www.tornau.name/wp-content/uploads/2009/04/studiumsmaterialien/neuronale_netze_zusammefassung.pdf">Vorlesung Neuronale Netze - Zusammenfassung - Christoph Tornau</a>
|
||||
- <a href="http://www.neuronalesnetz.de/">Neuronale Netze — Eine Einführung</a>
|
||||
- <a href="http://alphard.ethz.ch/hafner/Vorles/Optim/ANN/Artificial%20Neural%20Network%20based%20Curve%20Prediction%20Documentation.pdf">Artificial Neural Network based Curve Prediction</a>
|
||||
@@ -179,11 +180,11 @@
|
||||
namespace math {
|
||||
// tangens hyperbolicus as standard activation function
|
||||
template<typename TYPE> TYPE tanh(const TYPE& v) {
|
||||
return ::tanh((double)v);
|
||||
return ::tanh((long double)v);
|
||||
}
|
||||
// derivate of activation function for back propagation
|
||||
template<typename TYPE> TYPE tanh_diff(const TYPE& v) {
|
||||
TYPE ch(::cosh((double)v));
|
||||
TYPE ch(::cosh((long double)v));
|
||||
return 1/(ch*ch);
|
||||
}
|
||||
}
|
||||
@@ -200,13 +201,19 @@ class NeuroNet {
|
||||
public:
|
||||
NeuroNet() {
|
||||
}
|
||||
Matrix<TYPE, 1, OUTPUT_LAYERS> feed(Matrix<TYPE, 1, INPUT_LAYERS> in) {
|
||||
Matrix<TYPE, 1, OUTPUT_LAYERS> operator()(const Matrix<TYPE, 1, INPUT_LAYERS>& in) {
|
||||
Matrix<TYPE, 1, HIDDEN_LAYER_SIZE> l((in*_wi).apply(ACTIVATION));
|
||||
for (int i(0); i<HIDDEN_LAYERS-1; ++i)
|
||||
l = (l*_wh[i]).apply(ACTIVATION);
|
||||
Matrix<TYPE, 1, OUTPUT_LAYERS> out((l*_wo).apply(ACTIVATION));
|
||||
return out;
|
||||
}
|
||||
Matrix<TYPE, 1, OUTPUT_LAYERS> learn(const Matrix<TYPE, 1, INPUT_LAYERS>& in,
|
||||
const Matrix<TYPE, 1, OUTPUT_LAYERS>& expect) {
|
||||
Matrix<TYPE, 1, OUTPUT_LAYERS> out((*this)(in));
|
||||
Matrix<TYPE, 1, OUTPUT_LAYERS> diff(expect-out);
|
||||
return diff;
|
||||
}
|
||||
private:
|
||||
Matrix<TYPE, INPUT_LAYERS, HIDDEN_LAYER_SIZE> _wi;
|
||||
Matrix<TYPE, HIDDEN_LAYER_SIZE, HIDDEN_LAYER_SIZE> _wh[HIDDEN_LAYERS-1];
|
||||
|
@@ -31,12 +31,16 @@ class NeuroNetTest: public CppUnit::TestFixture {
|
||||
1,
|
||||
1,
|
||||
-1};
|
||||
for (int step(0); step<10; ++step)
|
||||
for (int i(0); i<sizeof(in)/sizeof(*in); ++i)
|
||||
for (int rep(0); rep<10; ++rep)
|
||||
auto res(neuronet.learn(in[i], out[i]));
|
||||
for (int i(0); i<sizeof(in)/sizeof(*in); ++i) {
|
||||
std::cout<<in[i]<<" → "<<out[i]<<" ~ "
|
||||
<<neuronet.feed(in[i]).apply([](float&v){
|
||||
<<neuronet(in[i]).apply([](float&v){
|
||||
v = v<0 ? -1.0 : 1.0;
|
||||
})<<std::endl;
|
||||
auto res(neuronet.feed(in[i])
|
||||
auto res(neuronet(in[i])
|
||||
.apply([](float&v){
|
||||
std::cout<<"v="<<v<<std::endl;
|
||||
v = v<0 ? -1.0 : 1.0;
|
||||
|
Reference in New Issue
Block a user