BCECriterion

Struct BCECriterion 

Source
pub struct BCECriterion { /* private fields */ }
Expand description

The binary cross entropy criterion.

Uses the Sigmoid activation function and the cross entropy error.

Implementations§

Source§

impl BCECriterion

Source

pub fn new(regularization: Regularization<f64>) -> Self

Constructs a new BCECriterion with the given regularization.

§Examples
use rusty_machine::learning::nnet::BCECriterion;
use rusty_machine::learning::toolkit::regularization::Regularization;

// Create a new BCE criterion with L2 regularization of 0.3.
let criterion = BCECriterion::new(Regularization::L2(0.3f64));
Examples found in repository?
examples/nnet-and_gate.rs (line 43)
15fn main() {
16    println!("AND gate learner sample:");
17
18    const THRESHOLD: f64 = 0.7;
19
20    const SAMPLES: usize = 10000;
21    println!("Generating {} training data and labels...", SAMPLES as u32);
22
23    let mut input_data = Vec::with_capacity(SAMPLES * 2);
24    let mut label_data = Vec::with_capacity(SAMPLES);
25
26    for _ in 0..SAMPLES {
27        // The two inputs are "signals" between 0 and 1
28        let Closed01(left) = random::<Closed01<f64>>();
29        let Closed01(right) = random::<Closed01<f64>>();
30        input_data.push(left);
31        input_data.push(right);
32        if left > THRESHOLD && right > THRESHOLD {
33            label_data.push(1.0);
34        } else {
35            label_data.push(0.0)
36        }
37    }
38
39    let inputs = Matrix::new(SAMPLES, 2, input_data);
40    let targets = Matrix::new(SAMPLES, 1, label_data);
41
42    let layers = &[2, 1];
43    let criterion = BCECriterion::new(Regularization::L2(0.));
44    let mut model = NeuralNet::new(layers, criterion, StochasticGD::default());
45
46    println!("Training...");
47    // Our train function returns a Result<(), E>
48    model.train(&inputs, &targets).unwrap();
49
50    let test_cases = vec![
51        0.0, 0.0,
52        0.0, 1.0,
53        1.0, 1.0,
54        1.0, 0.0,
55        ];
56    let expected = vec![
57        0.0,
58        0.0,
59        1.0,
60        0.0,
61        ];
62    let test_inputs = Matrix::new(test_cases.len() / 2, 2, test_cases);
63    let res = model.predict(&test_inputs).unwrap();
64
65    println!("Evaluation...");
66    let mut hits = 0;
67    let mut misses = 0;
68    // Evaluation
69    println!("Got\tExpected");
70    for (idx, prediction) in res.into_vec().iter().enumerate() {
71        println!("{:.2}\t{}", prediction, expected[idx]);
72        if (prediction - 0.5) * (expected[idx] - 0.5) > 0. {
73            hits += 1;
74        } else {
75            misses += 1;
76        }
77    }
78
79    println!("Hits: {}, Misses: {}", hits, misses);
80    let hits_f = hits as f64;
81    let total = (hits + misses) as f64;
82    println!("Accuracy: {}%", (hits_f / total) * 100.);
83}

Trait Implementations§

Source§

impl Clone for BCECriterion

Source§

fn clone(&self) -> BCECriterion

Returns a duplicate of the value. Read more
1.0.0 · Source§

fn clone_from(&mut self, source: &Self)

Performs copy-assignment from source. Read more
Source§

impl Criterion for BCECriterion

Source§

type ActFunc = Sigmoid

The activation function for the criterion.
Source§

type Cost = CrossEntropyError

The cost function for the criterion.
Source§

fn regularization(&self) -> Regularization<f64>

Returns the regularization for this criterion. Read more
Source§

fn activate(&self, mat: Matrix<f64>) -> Matrix<f64>

The activation function applied to a matrix.
Source§

fn grad_activ(&self, mat: Matrix<f64>) -> Matrix<f64>

The gradient of the activation function applied to a matrix.
Source§

fn cost(&self, outputs: &Matrix<f64>, targets: &Matrix<f64>) -> f64

The cost function. Read more
Source§

fn cost_grad(&self, outputs: &Matrix<f64>, targets: &Matrix<f64>) -> Matrix<f64>

The gradient of the cost function. Read more
Source§

fn is_regularized(&self) -> bool

Checks if the current criterion includes regularization. Read more
Source§

fn reg_cost(&self, reg_weights: MatrixSlice<'_, f64>) -> f64

Returns the regularization cost for the criterion. Read more
Source§

fn reg_cost_grad(&self, reg_weights: MatrixSlice<'_, f64>) -> Matrix<f64>

Returns the regularization gradient for the criterion. Read more
Source§

impl Debug for BCECriterion

Source§

fn fmt(&self, f: &mut Formatter<'_>) -> Result

Formats the value using the given formatter. Read more
Source§

impl Default for BCECriterion

Creates an MSE Criterion without any regularization.

Source§

fn default() -> Self

Returns the “default value” for a type. Read more
Source§

impl Copy for BCECriterion

Auto Trait Implementations§

Blanket Implementations§

Source§

impl<T> Any for T
where T: 'static + ?Sized,

Source§

fn type_id(&self) -> TypeId

Gets the TypeId of self. Read more
Source§

impl<T> Borrow<T> for T
where T: ?Sized,

Source§

fn borrow(&self) -> &T

Immutably borrows from an owned value. Read more
Source§

impl<T> BorrowMut<T> for T
where T: ?Sized,

Source§

fn borrow_mut(&mut self) -> &mut T

Mutably borrows from an owned value. Read more
Source§

impl<T> CloneToUninit for T
where T: Clone,

Source§

unsafe fn clone_to_uninit(&self, dest: *mut u8)

🔬This is a nightly-only experimental API. (clone_to_uninit)
Performs copy-assignment from self to dest. Read more
Source§

impl<T> From<T> for T

Source§

fn from(t: T) -> T

Returns the argument unchanged.

Source§

impl<T, U> Into<U> for T
where U: From<T>,

Source§

fn into(self) -> U

Calls U::from(self).

That is, this conversion is whatever the implementation of From<T> for U chooses to do.

Source§

impl<T> ToOwned for T
where T: Clone,

Source§

type Owned = T

The resulting type after obtaining ownership.
Source§

fn to_owned(&self) -> T

Creates owned data from borrowed data, usually by cloning. Read more
Source§

fn clone_into(&self, target: &mut T)

Uses borrowed data to replace owned data, usually by cloning. Read more
Source§

impl<T, U> TryFrom<U> for T
where U: Into<T>,

Source§

type Error = Infallible

The type returned in the event of a conversion error.
Source§

fn try_from(value: U) -> Result<T, <T as TryFrom<U>>::Error>

Performs the conversion.
Source§

impl<T, U> TryInto<U> for T
where U: TryFrom<T>,

Source§

type Error = <U as TryFrom<T>>::Error

The type returned in the event of a conversion error.
Source§

fn try_into(self) -> Result<U, <U as TryFrom<T>>::Error>

Performs the conversion.