sarek 0.1.0

A work-in-progress, experimental neural network library utilizing TensorFlow Keras
use {
    decorum
};

#[derive(Clone, PartialEq, Eq, PartialOrd, Ord, Debug)]
pub struct OptimizerSGD {
    pub(crate) learning_rate: decorum::Ordered< f32 >
}

impl OptimizerSGD {
    pub fn new() -> OptimizerSGD {
        OptimizerSGD {
            learning_rate: 0.01.into()
        }
    }

    pub fn set_learning_rate( &mut self, value: f32 ) -> &mut Self {
        self.learning_rate = value.into();
        self
    }
}

#[derive(Clone, PartialEq, Eq, PartialOrd, Ord, Debug)]
pub struct OptimizerAdam {
    pub(crate) learning_rate: decorum::Ordered< f32 >
}

impl OptimizerAdam {
    pub fn new() -> OptimizerAdam {
        OptimizerAdam {
            learning_rate: 0.001.into()
        }
    }

    pub fn set_learning_rate( &mut self, value: f32 ) -> &mut Self {
        self.learning_rate = value.into();
        self
    }
}

#[derive(Clone, PartialEq, Eq, PartialOrd, Ord, Debug)]
#[non_exhaustive]
pub enum Optimizer {
    SGD( OptimizerSGD ),
    Adam( OptimizerAdam )
}

impl From< OptimizerSGD > for Optimizer {
    #[inline]
    fn from( optimizer: OptimizerSGD ) -> Self {
        Optimizer::SGD( optimizer )
    }
}

impl From< OptimizerAdam > for Optimizer {
    #[inline]
    fn from( optimizer: OptimizerAdam ) -> Self {
        Optimizer::Adam( optimizer )
    }
}