neural_network_rs/neural_network/cost_function/
mod.rs1use ndarray::{Array1, Array2};
2
3pub mod quadratic_cost;
4
5pub struct CostFunction {
6 pub f: fn(&Array1<f64>, &Array1<f64>) -> f64,
7 pub d: fn(&Array1<f64>, &Array1<f64>) -> Array1<f64>,
8}
9
10impl CostFunction {
11 pub fn cost(&self, a: &Array2<f64>, expected: &Array2<f64>) -> f64 {
12 let mut cost = 0.0;
13 for (a, expected) in a.outer_iter().zip(expected.outer_iter()) {
14 cost += (self.f)(&a.to_owned(), &expected.to_owned());
15 }
16 cost / a.nrows() as f64
17 }
18
19 pub fn cost_derivative(&self, a: &Array2<f64>, expected: &Array2<f64>) -> Array2<f64> {
20 let mut cost_derivative = Array2::zeros(a.raw_dim());
21
22 for i in 0..a.ncols() {
23 cost_derivative
24 .column_mut(i)
25 .assign(&((self.d)(&a.column(i).to_owned(), &expected.column(i).to_owned())));
26 }
27
28 cost_derivative
29 }
30}