use crate::{
activation::Activation,
linalg::{Matrix, Scalar},
};
pub mod defaults;
pub mod dense_layer;
pub mod full_layer;
pub enum Layers {
Dense,
Activation(Activation),
}
pub trait Layer {
fn forward(&mut self, input: Matrix) -> Matrix;
fn backward(&mut self, epoch: usize, output_gradient: Matrix) -> Matrix;
}
pub trait ParameterableLayer {
fn as_learnable_layer(&self) -> Option<&dyn LearnableLayer>;
fn as_learnable_layer_mut(&mut self) -> Option<&mut dyn LearnableLayer>;
fn as_dropout_layer(&mut self) -> Option<&mut dyn DropoutLayer>;
}
pub trait DropoutLayer {
fn enable_dropout(&mut self);
fn disable_dropout(&mut self);
}
pub trait LearnableLayer {
fn get_learnable_parameters(&self) -> Vec<Vec<Scalar>>;
fn set_learnable_parameters(&mut self, params_matrix: &Vec<Vec<Scalar>>);
}