pub mod dense;
pub mod activation;
pub use activation::*;
pub use crate::tensor::*;
pub use crate::tensor::error::ShapeMismatchError;
pub type Result<T> = std::result::Result<T, ShapeMismatchError>;
pub trait Layer<T: NumT> {
fn forward_propagate(&self, input: &Tensor<T>, activate: bool) -> Result<Tensor<T>>;
fn activate(&self, output: &Tensor<T>) -> Result<Tensor<T>>;
fn backpropagate_delta(&self, delta: &Tensor<T>, a_lst: &Tensor<T>, sigma_lst: &Activation<T>) -> Result<Tensor<T>>;
fn descend(&mut self, rate: T, delta: &Tensor<T>, a_lst: &Tensor<T>) -> Result<()>;
}