mod impl_trainer;
use crate::Records;
use crate::dataset::DatasetBase;
use concision_core::Model;
pub trait ModelTrainer<T> {
type Model: Model<T>;
fn trainer<'a, U, V>(
&mut self,
dataset: DatasetBase<U, V>,
model: &'a mut Self::Model,
) -> Trainer<'a, Self::Model, T, DatasetBase<U, V>>
where
Self: Sized,
T: Default,
for<'b> &'b mut Self::Model: Model<T>,
{
Trainer::new(model, dataset)
}
}
pub struct Trainer<'a, M, T, R>
where
M: Model<T>,
R: Records,
{
pub(crate) dataset: DatasetBase<R::Inputs, R::Targets>,
pub(crate) model: &'a mut M,
pub(crate) loss: T,
}
impl<'a, M, T, R> core::ops::Deref for Trainer<'a, M, T, R>
where
M: Model<T>,
R: Records,
{
type Target = M;
fn deref(&self) -> &Self::Target {
self.model
}
}
impl<'a, M, T, R> core::ops::DerefMut for Trainer<'a, M, T, R>
where
M: Model<T>,
R: Records,
{
fn deref_mut(&mut self) -> &mut Self::Target {
self.model
}
}