FlexNN 1
Fully connected neural network built from scratch with flexible n-layer design and multiple activations.
Loading...
Searching...
No Matches
BatchNorm1D.hpp
Go to the documentation of this file.
1
15#pragma once
16
17#include <utility>
18
19#include <Eigen/Dense>
20
21#include "LayerTypes.hpp"
22#include "../activations/Activation.hpp"
23
24namespace FlexNN::Layers {
25
27 public:
30 explicit BatchNorm1D(int numFeatures, float epsilon = 1e-5f,
32
33 LayerType type() const noexcept { return LayerType::BatchNorm1D; }
34 Activations::Activation activation() const noexcept { return act_; }
35 const BatchNormParams& params() const noexcept { return params_; }
36
37 // Accessors for ModelIO and tests (gamma/beta/mean/var each [F])
38 const Eigen::VectorXd& gamma() const noexcept { return gamma_; }
39 const Eigen::VectorXd& beta() const noexcept { return beta_; }
40 const Eigen::VectorXd& runningMean() const noexcept { return runningMean_; }
41 const Eigen::VectorXd& runningVar() const noexcept { return runningVar_; }
42 void setGamma(const Eigen::VectorXd& g) { gamma_ = g; }
43 void setBeta(const Eigen::VectorXd& b) { beta_ = b; }
44 void setRunningMean(const Eigen::VectorXd& m) { runningMean_ = m; }
45 void setRunningVar(const Eigen::VectorXd& v) { runningVar_ = v; }
46
58 std::pair<Eigen::MatrixXd, Eigen::MatrixXd> forward(
59 const Eigen::MatrixXd& input) const;
60
66 std::pair<Eigen::MatrixXd, Eigen::MatrixXd> forward(
67 const Eigen::MatrixXd& input, bool training) const;
68
69 // Backward with upstream (for hidden layers)
70 Eigen::MatrixXd backward(const Eigen::MatrixXd& upstream,
71 const Eigen::MatrixXd& currZ) const;
72 // Legacy 3-arg for compatibility (delegates to upstream version)
73 Eigen::MatrixXd backward(const Eigen::MatrixXd& nextW,
74 const Eigen::MatrixXd& nextdZ,
75 const Eigen::MatrixXd& currZ) const;
76
77 Eigen::MatrixXd propagate(const Eigen::MatrixXd& dZ) const;
78
79 std::pair<Eigen::MatrixXd, Eigen::VectorXd> grad(
80 const Eigen::MatrixXd& dZ, const Eigen::MatrixXd& input) const;
81
82 void update(const Eigen::MatrixXd& dW, const Eigen::VectorXd& db,
83 double lr) noexcept;
84 void updateWeights(const Eigen::MatrixXd& dW, const Eigen::VectorXd& db,
85 double lr) noexcept {
86 update(dW, db, lr);
87 }
88
89 private:
90 BatchNormParams params_{};
92 Eigen::VectorXd gamma_;
93 Eigen::VectorXd beta_;
94 mutable Eigen::VectorXd runningMean_;
95 mutable Eigen::VectorXd runningVar_;
96};
97
98} // namespace FlexNN::Layers
Shared PODs for FlexNN::Layers — LayerType, DType, and per-type Params.
Definition BatchNorm1D.hpp:26
const Eigen::VectorXd & runningVar() const noexcept
Definition BatchNorm1D.hpp:41
std::pair< Eigen::MatrixXd, Eigen::VectorXd > grad(const Eigen::MatrixXd &dZ, const Eigen::MatrixXd &input) const
Definition BatchNorm1D.cpp:126
Eigen::MatrixXd backward(const Eigen::MatrixXd &upstream, const Eigen::MatrixXd &currZ) const
Definition BatchNorm1D.cpp:87
void setGamma(const Eigen::VectorXd &g)
Definition BatchNorm1D.hpp:42
const Eigen::VectorXd & beta() const noexcept
Definition BatchNorm1D.hpp:39
LayerType type() const noexcept
Definition BatchNorm1D.hpp:33
void setRunningVar(const Eigen::VectorXd &v)
Definition BatchNorm1D.hpp:45
std::pair< Eigen::MatrixXd, Eigen::MatrixXd > forward(const Eigen::MatrixXd &input) const
Forward with batch stats (training) — updates running stats.
Definition BatchNorm1D.cpp:33
Eigen::MatrixXd propagate(const Eigen::MatrixXd &dZ) const
Definition BatchNorm1D.cpp:107
void updateWeights(const Eigen::MatrixXd &dW, const Eigen::VectorXd &db, double lr) noexcept
Definition BatchNorm1D.hpp:84
void setRunningMean(const Eigen::VectorXd &m)
Definition BatchNorm1D.hpp:44
const Eigen::VectorXd & gamma() const noexcept
Definition BatchNorm1D.hpp:38
void update(const Eigen::MatrixXd &dW, const Eigen::VectorXd &db, double lr) noexcept
Definition BatchNorm1D.cpp:140
const BatchNormParams & params() const noexcept
Definition BatchNorm1D.hpp:35
void setBeta(const Eigen::VectorXd &b)
Definition BatchNorm1D.hpp:43
Activations::Activation activation() const noexcept
Definition BatchNorm1D.hpp:34
const Eigen::VectorXd & runningMean() const noexcept
Definition BatchNorm1D.hpp:40
Activation
Activation function identifier.
Definition Activation.hpp:41
@ None
Linear, no activation.
Definition BatchNorm1D.hpp:24
LayerType
Layer kind, stable on-wire (uint8_t).
Definition LayerTypes.hpp:22
@ BatchNorm1D
Per-feature BatchNorm (gamma/beta/mean/var in aux)
Parameters for BatchNorm1D.
Definition LayerTypes.hpp:92