favannat/matrix/feedforward/
evaluator.rs

1use nalgebra::DMatrix;
2
3use crate::network::{Evaluator, NetworkIO};
4
5#[derive(Debug)]
6pub struct MatrixFeedforwardEvaluator {
7    pub stages: Vec<DMatrix<f64>>,
8    pub transformations: Vec<crate::Transformations>,
9}
10
11impl Evaluator for MatrixFeedforwardEvaluator {
12    fn evaluate<T: NetworkIO>(&self, state: T) -> T {
13        let mut state = NetworkIO::input(state);
14        // performs evaluation by sequentially matrix multiplying and transforming the state with every stage
15        for (stage_matrix, transformations) in self.stages.iter().zip(&self.transformations) {
16            state *= stage_matrix;
17            for (value, activation) in state.iter_mut().zip(transformations) {
18                *value = activation(*value);
19            }
20        }
21        NetworkIO::output(state)
22    }
23}