utils.hpp (1627B)
1 #ifndef UTILS_H 2 #define UTILS_H 3 4 #include <functional> 5 #include <Eigen/Dense> 6 #include "bpnn.hpp" 7 8 namespace Jacobian { 9 namespace activations { 10 float sigmoid(float x); 11 float sigmoid_deriv(float x); 12 float linear(float x); 13 float linear_deriv(float x); 14 float step(float x); 15 float step_deriv(float x); 16 float bipolar(float x); 17 float bipolar_deriv(float x); 18 float mytanh(float x); 19 float tanh_deriv(float x); 20 float lecun_tanh(float x); 21 float lecun_tanh_deriv(float x); 22 float cloglog(float x); 23 float cloglog_deriv(float x); 24 float softplus(float x); 25 float softplus_deriv(float x); 26 float inverse_logit(float x); 27 float inverse_logit_deriv(float x); 28 float hard_tanh(float x); 29 float hard_tanh_deriv(float x); 30 float bipolar_sigmoid(float x); 31 float bipolar_sigmoid_deriv(float x); 32 float leaky_relu(float x); 33 float leaky_relu_deriv(float x); 34 std::function<float(float)> rectifier(float (*activation)(float)); 35 } 36 37 namespace optimizers { 38 std::function<void(Layer&, Eigen::MatrixXf, float)> momentum(float beta); 39 std::function<void(Layer&, Eigen::MatrixXf, float)> demon(float beta_init, int max_ep); 40 std::function<void(Layer&, Eigen::MatrixXf, float)> adam(float beta1, float beta2, float epsilon); 41 std::function<void(Layer&, Eigen::MatrixXf, float)> adamax(float beta1, float beta2, float epsilon); 42 } 43 44 namespace decays { 45 std::function<void(float &)> step(float a_0, float k); 46 std::function<void(float &)> exponential(float a_0, float k); 47 std::function<void(float &)> fractional(float a_0, float k); 48 std::function<void(float &)> linear(int max_ep); 49 } 50 51 Eigen::MatrixXf strassen_mul(Eigen::MatrixXf a, Eigen::MatrixXf b); 52 53 } 54 55 #endif /* MODULE_H */