#pragma once #include "core/omp_config.h" #include "utils/vector.h" #include "utils/matrix.h" #include "modules/neural_networks/layers/Layer.h" #include "numerics/neg.h" #include "numerics/exp.h" #include "numerics/add.h" #include "numerics/div.h" #include "numerics/sub.h" #include "numerics/mul.h" namespace neural_networks{ template struct Activation_Sigmoid : Layer{ utils::Matrix _inputs; utils::Matrix outputs; utils::Matrix dinputs; void forward(const utils::Matrix& inputs){ _inputs = inputs; outputs = numerics::neg(inputs); outputs = numerics::exp(outputs); outputs = numerics::add(outputs, T{1}); outputs = numerics::div(T{1}, outputs); } void backward(const utils::Matrix& dvalues){ dinputs = numerics::sub(T{1}, outputs); dinputs = numerics::mul(dvalues, dinputs); dinputs = numerics::mul(dinputs, outputs); } }; } // end namespace neural_networks