FlexNN 1
Fully connected neural network built from scratch with flexible n-layer design and multiple activations.
Loading...
Searching...
No Matches
Dense.hpp
Go to the documentation of this file.
1
11#pragma once
12
13#include <string>
14#include <utility>
15
16#include <Eigen/Dense>
17
18#include "LayerTypes.hpp"
21
22namespace FlexNN::Layers {
23
31class Dense {
32 public:
44 Dense(int in, int out,
47
51 explicit Dense(DenseParams p,
54
61 [[deprecated("use Activations::Activation enum")]]
62 Dense(int in, int out, const std::string& actStr);
63
64 // Accessors — used by NeuralNetwork and ModelIO via visit.
65 LayerType type() const noexcept { return LayerType::Dense; }
66 Activations::Activation activation() const noexcept { return act_; }
67 const Activations::ActivationParameters& activationParams() const noexcept { return actParams_; }
68 const DenseParams& params() const noexcept { return params_; }
69 const Eigen::MatrixXd& weights() const noexcept { return W_; }
70 const Eigen::VectorXd& biases() const noexcept { return b_; }
71
72 // Mutators for importModel (replaces weights after allocation).
73 void setWeights(const Eigen::MatrixXd& W) { W_ = W; }
74 void setBiases(const Eigen::VectorXd& b) { b_ = b; }
76
83 std::pair<Eigen::MatrixXd, Eigen::MatrixXd> forward(
84 const Eigen::MatrixXd& input) const;
85
99 Eigen::MatrixXd backward(const Eigen::MatrixXd& nextW,
100 const Eigen::MatrixXd& nextdZ,
101 const Eigen::MatrixXd& currZ) const;
102
114 Eigen::MatrixXd backward(const Eigen::MatrixXd& upstream,
115 const Eigen::MatrixXd& currZ) const;
116
123 Eigen::MatrixXd propagate(const Eigen::MatrixXd& dZ) const;
124
128 void update(const Eigen::MatrixXd& dW, const Eigen::VectorXd& db,
129 double lr) noexcept;
130
131 private:
132 DenseParams params_{};
135 Eigen::MatrixXd W_;
136 Eigen::VectorXd b_;
137};
138
139} // namespace FlexNN::Layers
Per-activation hyperparameters for FlexNN::Activations.
Public activation enum and helpers for FlexNN.
Shared PODs for FlexNN::Layers — LayerType, DType, and per-type Params.
Fully-connected layer: Z = W*X + b, A = act(Z).
Definition Dense.hpp:31
LayerType type() const noexcept
Definition Dense.hpp:65
Activations::Activation activation() const noexcept
Definition Dense.hpp:66
void setActivationParameters(const Activations::ActivationParameters &p)
Definition Dense.hpp:75
const DenseParams & params() const noexcept
Definition Dense.hpp:68
const Eigen::VectorXd & biases() const noexcept
Definition Dense.hpp:70
const Activations::ActivationParameters & activationParams() const noexcept
Definition Dense.hpp:67
void setBiases(const Eigen::VectorXd &b)
Definition Dense.hpp:74
void update(const Eigen::MatrixXd &dW, const Eigen::VectorXd &db, double lr) noexcept
SGD update: W -= lr*dW, b -= lr*db.
Definition Dense.cpp:73
Eigen::MatrixXd propagate(const Eigen::MatrixXd &dZ) const
Propagate gradient to previous layer: dX = W^T * dZ.
Definition Dense.cpp:69
const Eigen::MatrixXd & weights() const noexcept
Definition Dense.hpp:69
std::pair< Eigen::MatrixXd, Eigen::MatrixXd > forward(const Eigen::MatrixXd &input) const
Forward pass: Z = W*X + b, A = act(Z).
Definition Dense.cpp:42
void setWeights(const Eigen::MatrixXd &W)
Definition Dense.hpp:73
Eigen::MatrixXd backward(const Eigen::MatrixXd &nextW, const Eigen::MatrixXd &nextdZ, const Eigen::MatrixXd &currZ) const
Backward: ‘dZ = f’(Z) ⊙ (W_next^T * dZ_next)ordZ = W_next^T*dZ_next` if None.
Definition Dense.cpp:51
Activation
Activation function identifier.
Definition Activation.hpp:41
Definition BatchNorm1D.hpp:24
LayerType
Layer kind, stable on-wire (uint8_t).
Definition LayerTypes.hpp:22
@ Dense
Fully-connected: W[out×in], b[out].
Hyperparameters for activations.
Definition ActivationParameters.hpp:30
Parameters for a Dense layer.
Definition LayerTypes.hpp:49