/* * MLP.cpp * * Created on: 09.06.2011 * Author: sven */ #include #include #include #include #include #include #include #include "MLP.h" MLP::MLP(const MLPConfig& mlpConf) :mStartHidden(1+mlpConf.getNumInputNeurons()),mStartOutput(mStartHidden+mlpConf.getNumHiddenNeurons()) ,mNoNeuron(mStartOutput + mlpConf.getNumOutputNeurons()) ,mActivity(mNoNeuron), mDelta(mNoNeuron) ,mMomentum(mlpConf.getMomentum()) ,mLernrate(mlpConf.getLernrate()),mConfig(mlpConf),mTrainSuccess(false),mDoStop(false) { mWeights = mlpConf.getWeights(); for (uint32_t i = 0; i < mNoNeuron ; i++) { mDeltaWeights.push_back(vector(mNoNeuron)); mOldUpdate.push_back(vector(mNoNeuron)); } // Bias neuron is always on mActivity.at(0) = 1.0; } MLP::~MLP() { } void MLP::dump() { int width = 12; int prec = 8; cout << "============ MLP config==========" << endl; cout << "start hidden: " << mStartHidden << endl; cout << "start output: " << mStartOutput << endl; cout << "no neuron: " << mNoNeuron << endl; cout << "Weights:" << endl; BOOST_FOREACH(vector i, mWeights) { BOOST_FOREACH(double w, i) { cout << setw(width) << fixed << setprecision(prec) << w; } cout << endl; } cout << "Deltaweights:" << endl; BOOST_FOREACH(vector i, mDeltaWeights) { BOOST_FOREACH(double w, i) { cout << setw(width) << setprecision(prec) << w; } cout << endl; } cout << "OldUpdate:" << endl; BOOST_FOREACH(vector i, mOldUpdate) { BOOST_FOREACH(double w, i) { cout << setw(width) << setprecision(prec) << w; } cout << endl; } cout << "Activity:" << endl; BOOST_FOREACH(double w, mActivity) { cout << setw(width) << setprecision(prec) << w; } cout << endl; cout << "=================================" << endl; } double MLP::sigmoid(const double& a) { double res = 0.0; res = 1.0 / (1.0 + exp(-a) ); return res; } void MLP::propagate(const Pattern& pattern) { uint32_t i,j; double activation = 0.0; if (pattern.size() != (mStartHidden - 1) ) { cerr << "Pattern does not match input neurons: " << pattern.size() << " != " << (mStartHidden - 1) << endl; exit(1); } for (i=1 ; i < mStartHidden ; i++) { mActivity.at(i) = pattern.at(i - 1); } for (i=mStartHidden ; i