#ifndef LAYER_ACTIVATION_HPP #define LAYER_ACTIVATION_HPP #include "layer.hpp" #include "math.hpp" namespace Layer{ enum ActivationMap{Sigmoid}; template Real activation_map(Real); template Real activation_diff_map(Real); template<> Real activation_map(Real); template<> Real activation_diff_map(Real); template class Activation:public Layer{ private: using Layer::x_out; public: Activation(size_t n); Vector feed_forward(Vector x); void init_nabla(){}; Vector back_propagation(Vector d); void update(Real){}; }; template inline Activation::Activation(size_t n):Layer(n,n){ } template inline Vector Activation::feed_forward(Vector x){ x_in=x; for(size_t i=0;i(x[i]); } return x_out; } template inline Vector Activation::back_propagation(Vector d){ for(size_t i=0;i(x_in[i])*d[i]; } return delta; } template<> Real activation_map(Real x){ return 1.0/(1.0+exp(-x)); } template<> Real activation_diff_map(Real x){ Real t=activation_map(x); return t*(1.0-t); } } #endif