FlexNN 1
Fully connected neural network built from scratch with flexible n-layer design and multiple activations.
Loading...
Searching...
No Matches
Sigmoid.hpp
Go to the documentation of this file.
1
9#pragma once
10
11#include <algorithm> // std::max / std::min
12#include <Eigen/Dense>
13#include <cmath>
14
16
22inline Eigen::MatrixXd sigmoid_forward(const Eigen::MatrixXd& Z) {
23 return Z.unaryExpr([](double x) {
24 double z = std::max(-15.0, std::min(15.0, x));
25 return 1.0 / (1.0 + std::exp(-z));
26 });
27}
28
35inline Eigen::MatrixXd sigmoid_backward(const Eigen::MatrixXd& dA,
36 const Eigen::MatrixXd& /*Z*/,
37 const Eigen::MatrixXd& A) noexcept {
38 return dA.array() * A.array() * (1.0 - A.array());
39}
40
41} // namespace FlexNN::Activations::detail
Definition Activation.hpp:81
Eigen::MatrixXd sigmoid_backward(const Eigen::MatrixXd &dA, const Eigen::MatrixXd &, const Eigen::MatrixXd &A) noexcept
Sigmoid backward: dZ = dA * A * (1 - A).
Definition Sigmoid.hpp:35
Eigen::MatrixXd sigmoid_forward(const Eigen::MatrixXd &Z)
Sigmoid forward: A = 1/(1+exp(-clamp(Z))) elementwise.
Definition Sigmoid.hpp:22