use ritenn::{Activation, HaltCondition, LearningMode, NN};
#[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], Activation::PELU, Activation::Sigmoid);
net1.train(&examples)
.log_interval(Some(1000))
.halt_condition(HaltCondition::MSE(0.01))
.learning_mode(LearningMode::Incremental)
.momentum(0.1)
.go();
#[cfg(feature = "serde_flexbuffers")]
let flexbuffers = net1.to_flexbuffers();
#[cfg(feature = "serde_flexbuffers")]
let net2 = NN::from_flexbuffers(&flexbuffers);
for &(ref inputs, ref outputs) in examples.iter() {
#[cfg(not(feature = "serde_flexbuffers"))]
let results = net1.run(inputs);
#[cfg(feature = "serde_flexbuffers")]
let results = net2.run(inputs);
let (result, key) = (results[0].round(), outputs[0]);
assert!(result == key);
}
}