nnfw/include/outputfunction.h

Go to the documentation of this file.
00001 /********************************************************************************
00002  *  Neural Network Framework.                                                   *
00003  *  Copyright (C) 2005-2011 Gianluca Massera <emmegian@yahoo.it>                *
00004  *                                                                              *
00005  *  This program is free software; you can redistribute it and/or modify        *
00006  *  it under the terms of the GNU General Public License as published by        *
00007  *  the Free Software Foundation; either version 2 of the License, or           *
00008  *  (at your option) any later version.                                         *
00009  *                                                                              *
00010  *  This program is distributed in the hope that it will be useful,             *
00011  *  but WITHOUT ANY WARRANTY; without even the implied warranty of              *
00012  *  MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the               *
00013  *  GNU General Public License for more details.                                *
00014  *                                                                              *
00015  *  You should have received a copy of the GNU General Public License           *
00016  *  along with this program; if not, write to the Free Software                 *
00017  *  Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA  02110-1301  USA  *
00018  ********************************************************************************/
00019 
00020 #ifndef OUTPUTFUNCTION_H
00021 #define OUTPUTFUNCTION_H
00022 
00028 #include "nnfwconfig.h"
00029 #include <parametersettable.h>
00030 #include <configurationparameters.h>
00031 #include <QRegExp>
00032 
00033 namespace farsa {
00034 
00039 class FARSA_NNFW_TEMPLATE OutputFunction : public ParameterSettableWithConfigureFunction {
00040 public:
00042     OutputFunction() : clusterv(NULL), tmp1(1), tmp2(1) { /*nothing to do*/ };
00044     virtual ~OutputFunction() { /*nothing to do*/ };
00046     virtual void apply( DoubleVector& inputs, DoubleVector& outputs ) = 0;
00048     double apply( double input ) {
00049         tmp1[0] = input;
00050         apply( tmp1, tmp2 );
00051         return tmp2[0];
00052     };
00059     virtual bool derivate( const DoubleVector& inputs, const DoubleVector& outputs, DoubleVector& derivates ) const {
00060         Q_UNUSED( inputs );
00061         Q_UNUSED( outputs );
00062         Q_UNUSED( derivates );
00063         return false;
00064     };
00068     void setCluster( Cluster* cl ) {
00069         if ( clusterv != NULL ) throw OutputFunctionSetClusterException();
00070         clusterv = cl;
00071         clusterSetted();
00072     };
00073 protected:
00077     virtual void clusterSetted() { /* nothing to do */ };
00079     Cluster* clusterv;
00080 private:
00082     DoubleVector tmp1;
00084     DoubleVector tmp2;
00085 };
00086 
00087 }
00088 
00089 #endif