FlexNN 1
Fully connected neural network built from scratch with flexible n-layer design and multiple activations.
Loading...
Searching...
No Matches
Conv1D.hpp
Go to the documentation of this file.
1
16#pragma once
17
18#include <utility>
19
20#include <Eigen/Dense>
21
22#include "LayerTypes.hpp"
25
26namespace FlexNN::Layers {
27
28class Conv1D {
29 public:
37 explicit Conv1D(Conv1DParams p,
40
44 Conv1D(int inChannels, int outChannels, int kernelSize, int stride = 1,
45 int padding = 0, int dilation = 1,
48
49 LayerType type() const noexcept { return LayerType::Conv1D; }
50 Activations::Activation activation() const noexcept { return act_; }
51 const Activations::ActivationParameters& activationParams() const noexcept { return actParams_; }
52 const Conv1DParams& params() const noexcept { return params_; }
53 const Eigen::MatrixXd& weights() const noexcept { return W_; }
54 const Eigen::VectorXd& biases() const noexcept { return b_; }
55
56 void setWeights(const Eigen::MatrixXd& W) { W_ = W; }
57 void setBiases(const Eigen::VectorXd& b) { b_ = b; }
59
66 std::pair<Eigen::MatrixXd, Eigen::MatrixXd> forward(
67 const Eigen::MatrixXd& input) const;
68
75 Eigen::MatrixXd backward(const Eigen::MatrixXd& nextW,
76 const Eigen::MatrixXd& nextdZ,
77 const Eigen::MatrixXd& currZ) const;
78
86 Eigen::MatrixXd backward(const Eigen::MatrixXd& upstream,
87 const Eigen::MatrixXd& currZ) const;
88
104 Eigen::MatrixXd propagate(const Eigen::MatrixXd& dZ) const;
105
116 std::pair<Eigen::MatrixXd, Eigen::VectorXd> grad(
117 const Eigen::MatrixXd& dZ, const Eigen::MatrixXd& input) const;
118
119 void update(const Eigen::MatrixXd& dW, const Eigen::VectorXd& db,
120 double lr) noexcept;
121 void updateWeights(const Eigen::MatrixXd& dW, const Eigen::VectorXd& db,
122 double lr) noexcept {
123 update(dW, db, lr);
124 }
125
126 private:
127 // Helper: compute L_out from L_in
128 int l_out(int L_in) const noexcept;
129 // Helper: compute L_in from L_out (inverse, for propagate)
130 int l_in_from_lout(int L_out) const noexcept;
131
132 Conv1DParams 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.
Definition Conv1D.hpp:28
std::pair< Eigen::MatrixXd, Eigen::VectorXd > grad(const Eigen::MatrixXd &dZ, const Eigen::MatrixXd &input) const
Compute gradients dW and db for SGD update.
Definition Conv1D.cpp:193
Eigen::MatrixXd propagate(const Eigen::MatrixXd &dZ) const
Propagate gradient to previous layer: dX = W^T * dZ via col2im.
Definition Conv1D.cpp:143
void updateWeights(const Eigen::MatrixXd &dW, const Eigen::VectorXd &db, double lr) noexcept
Definition Conv1D.hpp:121
const Activations::ActivationParameters & activationParams() const noexcept
Definition Conv1D.hpp:51
LayerType type() const noexcept
Definition Conv1D.hpp:49
const Eigen::MatrixXd & weights() const noexcept
Definition Conv1D.hpp:53
void setWeights(const Eigen::MatrixXd &W)
Definition Conv1D.hpp:56
Activations::Activation activation() const noexcept
Definition Conv1D.hpp:50
void setBiases(const Eigen::VectorXd &b)
Definition Conv1D.hpp:57
void setActivationParameters(const Activations::ActivationParameters &p)
Definition Conv1D.hpp:58
std::pair< Eigen::MatrixXd, Eigen::MatrixXd > forward(const Eigen::MatrixXd &input) const
Forward: Z[oc][ol] = b[oc] + Σic Σk W[oc][ic*K+k] * Xpad[ic][ol*stride - pad + k*dilation]
Definition Conv1D.cpp:84
const Eigen::VectorXd & biases() const noexcept
Definition Conv1D.hpp:54
const Conv1DParams & params() const noexcept
Definition Conv1D.hpp:52
void update(const Eigen::MatrixXd &dW, const Eigen::VectorXd &db, double lr) noexcept
Definition Conv1D.cpp:245
Eigen::MatrixXd backward(const Eigen::MatrixXd &nextW, const Eigen::MatrixXd &nextdZ, const Eigen::MatrixXd &currZ) const
Backward for hidden layers (old signature, for dense_test compatibility).
Definition Conv1D.cpp:130
Activation
Activation function identifier.
Definition Activation.hpp:41
Definition BatchNorm1D.hpp:24
LayerType
Layer kind, stable on-wire (uint8_t).
Definition LayerTypes.hpp:22
@ Conv1D
1D temporal convolution
Hyperparameters for activations.
Definition ActivationParameters.hpp:30
Parameters for a Conv1D layer.
Definition LayerTypes.hpp:64