burn-train 0.22.0-pre.1

Training crate for the Burn framework
Documentation
mod async_wrapper;
mod base;
mod full;
mod metrics;
mod minimal;
#[cfg(feature = "rl")]
mod rl_metrics;
#[cfg(feature = "rl")]
mod rl_processor;

pub use base::*;
pub(crate) use full::*;
pub(crate) use metrics::*;
#[cfg(feature = "rl")]
pub(crate) use rl_metrics::*;
#[cfg(feature = "rl")]
pub use rl_processor::*;

#[cfg(test)]
pub(crate) use minimal::*;

pub use async_wrapper::{AsyncProcessorEvaluation, AsyncProcessorTraining};

#[cfg(test)]
pub(crate) mod test_utils {
    use crate::metric::{
        Adaptor, LossInput,
        processor::{EventProcessorTraining, LearnerEvent, MinimalEventProcessor, TrainingItem},
    };
    use burn_core::tensor::Tensor;

    use super::ItemLazy;

    impl ItemLazy for f64 {
        fn sync(self) -> Self {
            self
        }
    }

    impl Adaptor<LossInput> for f64 {
        fn adapt(&self) -> LossInput {
            LossInput::new(Tensor::from_data([*self], &Default::default()))
        }
    }

    pub(crate) fn process_train(
        processor: &mut MinimalEventProcessor<f64, f64>,
        value: f64,
        epoch: usize,
    ) {
        let dummy_progress = burn_core::data::dataloader::Progress {
            items_processed: epoch,
            items_total: 3,
            unit: Some("items".to_string()),
        };
        let dummy_iteration = Some(1);

        processor.process_train(LearnerEvent::ProcessedItem(TrainingItem::new(
            value,
            dummy_progress,
            dummy_iteration,
            None,
        )));
    }

    pub(crate) fn start_epoch(
        processor: &mut MinimalEventProcessor<f64, f64>,
        epoch: usize,
        num_items: usize,
    ) {
        processor.process_train(LearnerEvent::StartSplit {
            epoch_number: epoch,
            total_items: num_items,
        });
        processor.process_valid(LearnerEvent::StartSplit {
            epoch_number: epoch,
            total_items: num_items,
        });
    }

    pub(crate) fn end_epoch(processor: &mut MinimalEventProcessor<f64, f64>, epoch: usize) {
        processor.process_train(LearnerEvent::EndSplit(epoch));
        processor.process_valid(LearnerEvent::EndSplit(epoch));
    }
}