favannat/matrix/feedforward/
evaluator.rs1use 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 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}