activations.h

Go to the documentation of this file.
00001 /***************************************************************************/
00020 #ifndef AURESERVOIR_ACTIVATIONS_H__
00021 #define AURESERVOIR_ACTIVATIONS_H__
00022 
00023 #include "utilities.h"
00024 #include <math.h>
00025 
00026 namespace aureservoir
00027 {
00028 
00033 enum ActivationFunction
00034 {
00035   ACT_LINEAR,      
00036   ACT_TANH,        
00037   ACT_TANH2,       
00038   ACT_SIGMOID      
00039 };
00040 
00043 
00045 
00046 
00052 template <typename T>
00053 inline void act_linear(T *data, int size)
00054 { }
00055 
00061 template <typename T>
00062 inline void act_invlinear(T *data, int size)
00063 { }
00064 
00066 
00067 
00068 
00069 
00075 template <typename T>
00076 inline void act_tanh(T *data, int size)
00077 {
00078   for(int i=0; i<size; ++i)
00079     data[i] = tanh( data[i] );
00080 }
00081 
00087 template <typename T>
00088 inline void act_invtanh(T *data, int size)
00089 {
00090   for(int i=0; i<size; ++i)
00091     data[i] = atanh( data[i] );
00092 }
00093 
00095 
00096 
00097 
00099 DEVector<double>::Type tanh2_a_;
00101 DEVector<double>::Type tanh2_b_;
00102 
00110 template <typename T>
00111 inline void act_tanh2(T *data, int size)
00112 {
00113   assert( tanh2_a_.length() == size );
00114   assert( tanh2_b_.length() == size );
00115 
00116   for(int i=0; i<size; ++i)
00117     data[i] = tanh( data[i]*tanh2_a_(i+1) + tanh2_b_(i+1) );
00118 }
00119 
00126 template <typename T>
00127 inline void act_invtanh2(T *data, int size)
00128 {
00129   assert( tanh2_a_.length() == size );
00130   assert( tanh2_b_.length() == size );
00131 
00132   for(int i=0; i<size; ++i)
00133     data[i] = ( atanh(data[i]) - tanh2_b_(i+1) ) / tanh2_a_(i+1);
00134 }
00135 
00137 
00138 
00139 
00146 template <typename T>
00147 inline void act_sigmoid(T *data, int size)
00148 {
00149   for(int i=0; i<size; ++i)
00150     data[i] = 1.0 / (1.0 + exp(data[i]) );
00151 }
00152 
00160 template <typename T>
00161 inline void act_invsigmoid(T *data, int size)
00162 {
00163   for(int i=0; i<size; ++i)
00164     data[i] = log( 1.0/data[i] - 1.0 );
00165 }
00166 
00168 
00169 } // end of namespace aureservoir
00170 
00171 #endif // AURESERVOIR_ACTIVATIONS_H__

Generated on Wed Mar 12 21:16:05 2008 for aureservoir by  doxygen 1.5.3