rust_nn 0.1.0

An educational Neural Network framework in Rust
Documentation
use crate::matrix::Matrix2;

use super::NeuralNet;

pub struct Grad(
    pub Vec<Vec<Matrix2<f64>>>,
    pub Vec<Vec<Matrix2<f64>>>,
    pub Vec<Matrix2<f64>>,
);

impl Grad {
    pub fn empty(net: &NeuralNet, n_inputs: usize) -> Self {
        let mut w_grads = Vec::with_capacity(n_inputs);
        let mut b_grads = Vec::with_capacity(n_inputs);
        let mut d_acts = Vec::with_capacity(net.layers.len() + 1);

        for _ in 0..n_inputs {
            let mut w_grad = Vec::with_capacity(net.layers.len());
            let mut b_grad = Vec::with_capacity(net.layers.len());

            for layer in &net.layers {
                w_grad.push(Matrix2::new(layer.weights.rows(), layer.weights.cols()));
                b_grad.push(Matrix2::new(1, layer.biases.cols()));
            }

            w_grads.push(w_grad);
            b_grads.push(b_grad);
        }

        for l in &net.layers {
            d_acts.push(Matrix2::new(1, l.weights.cols()));
        }
        d_acts.push(Matrix2::new(0, 0));

        Grad(w_grads, b_grads, d_acts)
    }
}