FlexNN 1
Fully connected neural network built from scratch with flexible n-layer design and multiple activations.
Loading...
Searching...
No Matches
LeakyReLU.hpp
Go to the documentation of this file.
1
10#pragma once
11
12#include <Eigen/Dense>
13
15
16// Default kept for backward compat; prefer Activations::kDefaultLeakyAlpha.
17inline constexpr double kLeakyAlpha = 0.01;
18
24inline Eigen::MatrixXd leaky_relu_forward(const Eigen::MatrixXd& Z,
25 double alpha = kLeakyAlpha) {
26 return Z.unaryExpr([alpha](double x) { return x > 0.0 ? x : alpha * x; });
27}
28
35inline Eigen::MatrixXd leaky_relu_backward(const Eigen::MatrixXd& dA,
36 const Eigen::MatrixXd& Z,
37 const Eigen::MatrixXd& /*A*/,
38 double alpha = kLeakyAlpha) noexcept {
39 return dA.array() * (Z.array() > 0.0).cast<double>() +
40 dA.array() * (Z.array() <= 0.0).cast<double>() * alpha;
41 // Equivalent to: (Z>0 ? 1 : alpha) elementwise, keeps Eigen vectorization.
42}
43
44} // namespace FlexNN::Activations::detail
Definition Activation.hpp:81
Eigen::MatrixXd leaky_relu_backward(const Eigen::MatrixXd &dA, const Eigen::MatrixXd &Z, const Eigen::MatrixXd &, double alpha=kLeakyAlpha) noexcept
LeakyReLU backward: dZ = dA * (Z>0 ? 1 : alpha).
Definition LeakyReLU.hpp:35
Eigen::MatrixXd leaky_relu_forward(const Eigen::MatrixXd &Z, double alpha=kLeakyAlpha)
LeakyReLU forward: A = Z>0 ? Z : alpha*Z.
Definition LeakyReLU.hpp:24
constexpr double kLeakyAlpha
Definition LeakyReLU.hpp:17