FlexNN 1
Fully connected neural network built from scratch with flexible n-layer design and multiple activations.
Loading...
Searching...
No Matches
FlexNN::Layers::Conv1D Class Reference

#include <Conv1D.hpp>

Public Member Functions

 Conv1D (Conv1DParams p, Activations::Activation act=Activations::Activation::ReLU, const Activations::ActivationParameters &params=Activations::ActivationParameters{})
 Construct from params and activation.
 
 Conv1D (int inChannels, int outChannels, int kernelSize, int stride=1, int padding=0, int dilation=1, Activations::Activation act=Activations::Activation::ReLU, const Activations::ActivationParameters &params=Activations::ActivationParameters{})
 Convenience ctor with explicit ints.
 
LayerType type () const noexcept
 
Activations::Activation activation () const noexcept
 
const Activations::ActivationParameters & activationParams () const noexcept
 
const Conv1DParams & params () const noexcept
 
const Eigen::MatrixXd & weights () const noexcept
 
const Eigen::VectorXd & biases () const noexcept
 
void setWeights (const Eigen::MatrixXd &W)
 
void setBiases (const Eigen::VectorXd &b)
 
void setActivationParameters (const Activations::ActivationParameters &p)
 
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]
 
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).
 
Eigen::MatrixXd backward (const Eigen::MatrixXd &upstream, const Eigen::MatrixXd &currZ) const
 Backward with already-propagated upstream gradient.
 
Eigen::MatrixXd propagate (const Eigen::MatrixXd &dZ) const
 Propagate gradient to previous layer: dX = W^T * dZ via col2im.
 
std::pair< Eigen::MatrixXd, Eigen::VectorXd > grad (const Eigen::MatrixXd &dZ, const Eigen::MatrixXd &input) const
 Compute gradients dW and db for SGD update.
 
void update (const Eigen::MatrixXd &dW, const Eigen::VectorXd &db, double lr) noexcept
 
void updateWeights (const Eigen::MatrixXd &dW, const Eigen::VectorXd &db, double lr) noexcept
 

Constructor & Destructor Documentation

◆ Conv1D() [1/2]

FlexNN::Layers::Conv1D::Conv1D ( Conv1DParams  p,
Activations::Activation  act = Activations::Activation::ReLU,
const Activations::ActivationParameters &  params = Activations::ActivationParameters{} 
)
explicit

Construct from params and activation.

Initializes W and b with Random * 0.5 (same as Dense for v0.1).

Parameters
pConv1DParams with inChannels/outChannels/kernelSize/stride/pad/dilation
actActivation (default ReLU)

◆ Conv1D() [2/2]

FlexNN::Layers::Conv1D::Conv1D ( int  inChannels,
int  outChannels,
int  kernelSize,
int  stride = 1,
int  padding = 0,
int  dilation = 1,
Activations::Activation  act = Activations::Activation::ReLU,
const Activations::ActivationParameters &  params = Activations::ActivationParameters{} 
)

Convenience ctor with explicit ints.

Member Function Documentation

◆ activation()

Activations::Activation FlexNN::Layers::Conv1D::activation ( ) const
inlinenoexcept

◆ activationParams()

const Activations::ActivationParameters & FlexNN::Layers::Conv1D::activationParams ( ) const
inlinenoexcept

◆ backward() [1/2]

Eigen::MatrixXd FlexNN::Layers::Conv1D::backward ( const Eigen::MatrixXd &  nextW,
const Eigen::MatrixXd &  nextdZ,
const Eigen::MatrixXd &  currZ 
) const

Backward for hidden layers (old signature, for dense_test compatibility).

Computes dA = W_next^T * dZ_next then ‘dZ = f’(Z) ⊙ dA. Kept forDense-style testing; new code should usebackward(upstream, currZ)`.

◆ backward() [2/2]

Eigen::MatrixXd FlexNN::Layers::Conv1D::backward ( const Eigen::MatrixXd &  upstream,
const Eigen::MatrixXd &  currZ 
) const

Backward with already-propagated upstream gradient.

Parameters
upstreamGradient w.r.t. A of this layer (already W_next^T*dZ_next or propagate result)
currZPre-activation Z of this layer from forward
Returns
Gradient w.r.t. Z of this layer

◆ biases()

const Eigen::VectorXd & FlexNN::Layers::Conv1D::biases ( ) const
inlinenoexcept

◆ forward()

std::pair< Eigen::MatrixXd, Eigen::MatrixXd > FlexNN::Layers::Conv1D::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]

Parameters
inputFlattened input [C_in*L_in × batch] (each column is a sample)
Returns
Pair (Z, A) each [C_out*L_out × batch]

◆ grad()

std::pair< Eigen::MatrixXd, Eigen::VectorXd > FlexNN::Layers::Conv1D::grad ( const Eigen::MatrixXd &  dZ,
const Eigen::MatrixXd &  input 
) const

Compute gradients dW and db for SGD update.

Uses im2col: col [C_in*K × L_out] per sample, dW = Σ_n dZ_n * col_n^T / batch, db = rowMean over (batch*L_out) per channel (mean over batch and spatial).

Parameters
dZGradient w.r.t. Z [C_out*L_out × batch]
inputOriginal input to forward [C_in*L_in × batch]
Returns
Pair (dW, db) where dW is [outChannels × inChannels*K], db is [outChannels]

◆ params()

const Conv1DParams & FlexNN::Layers::Conv1D::params ( ) const
inlinenoexcept

◆ propagate()

Eigen::MatrixXd FlexNN::Layers::Conv1D::propagate ( const Eigen::MatrixXd &  dZ) const

Propagate gradient to previous layer: dX = W^T * dZ via col2im.

For Conv1D, this is the transpose convolution (col2im). Input dZ is [C_out*L_out × batch], output dX is [C_in*L_in × batch] where L_in is derived from dZ's implied L_out and params. The caller must know L_in — we derive it from dZ rows and params assuming the forward L_out formula. For the common case where Conv1D is followed by Dense, L_in is not needed because Dense's dZ is already flattened; this method is used when Conv1D is the next layer for a previous Dense — the Dense's upstream is propagate(dZ_next) from Conv1D.

Parameters
dZGradient w.r.t. Z of this Conv1D layer [C_out*L_out × batch]
Returns
Gradient w.r.t. input of this layer [C_in*L_in × batch] (derived)

◆ setActivationParameters()

void FlexNN::Layers::Conv1D::setActivationParameters ( const Activations::ActivationParameters &  p)
inline

◆ setBiases()

void FlexNN::Layers::Conv1D::setBiases ( const Eigen::VectorXd &  b)
inline

◆ setWeights()

void FlexNN::Layers::Conv1D::setWeights ( const Eigen::MatrixXd &  W)
inline

◆ type()

LayerType FlexNN::Layers::Conv1D::type ( ) const
inlinenoexcept

◆ update()

void FlexNN::Layers::Conv1D::update ( const Eigen::MatrixXd &  dW,
const Eigen::VectorXd &  db,
double  lr 
)
noexcept

◆ updateWeights()

void FlexNN::Layers::Conv1D::updateWeights ( const Eigen::MatrixXd &  dW,
const Eigen::VectorXd &  db,
double  lr 
)
inlinenoexcept

◆ weights()

const Eigen::MatrixXd & FlexNN::Layers::Conv1D::weights ( ) const
inlinenoexcept

The documentation for this class was generated from the following files: