Files
Flux/include/modules/neural_networks/activation_functions/Activation_Sigmoid.h
T

47 lines
1.0 KiB
C++

#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 <typename T>
struct Activation_Sigmoid : Layer<T>{
utils::Matrix<T> _inputs;
utils::Matrix<T> outputs;
utils::Matrix<T> dinputs;
void forward(const utils::Matrix<T>& 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<T>& dvalues){
dinputs = numerics::sub(T{1}, outputs);
dinputs = numerics::mul(dvalues, dinputs);
dinputs = numerics::mul(dinputs, outputs);
}
};
} // end namespace neural_networks