// // Created by fluffymoo on 11.6.18. // #include "NeuronLogistic.h" NeuronLogistic::NeuronLogistic(double a, double b) { this->n_activation_function_parameters = 2; this->activation_function_parameters = new double[2]; this->activation_function_parameters[0] = a; this->activation_function_parameters[1] = b; this->edges_in = new std::vector<Connection*>(0); this->edges_out = new std::vector<Connection*>(0); } void NeuronLogistic::activate( ) { double a = this->activation_function_parameters[0]; double b = this->activation_function_parameters[1]; double x = this->potential; double ex = std::pow(E, a - x); this->state = std::pow(1.0 + ex, -b); } double NeuronLogistic::activation_function_get_partial_derivative(int param_idx ) { double a = this->activation_function_parameters[0]; double b = this->activation_function_parameters[1]; double x = this->potential; if(param_idx == 0){ double ex = std::pow(E, a - x); double exa= -std::pow(ex + 1.0, -b); return exa * std::log(ex + 1.0); } else if(param_idx == 1){ /** * TODO * Could be write as activation_function_get_derivative() * -1 */ double ex = std::pow(E, a - x); double ex2 = std::pow(ex + 1.0, -b - 1.0); return -b * ex * ex2; } return 0.0; } double NeuronLogistic::activation_function_get_derivative( ) { double a = this->activation_function_parameters[0]; double b = this->activation_function_parameters[1]; double x = this->potential; double ex = std::pow(E, a - x); double ex2 = std::pow(ex + 1.0, -b - 1.0); return b * ex * ex2; }