extern crate nn;
extern crate time;
use nn::{NN, HaltCondition, LearningMode};
#[test]
fn xor_4layers() {
let examples = [
(vec![0f64, 0f64], vec![0f64]),
(vec![0f64, 1f64], vec![1f64]),
(vec![1f64, 0f64], vec![1f64]),
(vec![1f64, 1f64], vec![0f64]),
];
let mut net1 = NN::new(&[2,3,3,1]);
net1.train(&examples)
.log_interval(Some(1000))
.halt_condition( HaltCondition::MSE(0.01) )
.learning_mode( LearningMode::Incremental )
.momentum(0.1)
.go();
let json = net1.to_json();
let net2 = NN::from_json(&json);
for &(ref inputs, ref outputs) in examples.iter() {
let results = net2.run(inputs);
let (result, key) = (results[0].round(), outputs[0]);
assert!(result == key);
}
}