# fnn A simple Feedforward Neural Network library for Rust [![crates.io](https://img.shields.io/crates/v/fnn?style=for-the-badge)](https://crates.io/crates/fnn) [![docs.rs](https://img.shields.io/docsrs/fnn?style=for-the-badge)](https://docs.rs/fnn/latest/fnn)
## Features - First class support for `no_std` environments - Simplicity - Deterministic - It works ## Usage To create a new neural network you can use the following. This creates a network that takes two inputs, has two hidden neurons and gives one output. ```rs let mut nn = FeedForward::::new(); ``` Then given some training data like this: ```rs let training_data = [ ([0.0, 0.0], [0.0]), ([0.0, 1.0], [1.0]), ([1.0, 0.0], [1.0]), ([1.0, 1.0], [0.0]), ]; ``` You can train the network a few times: ```rs for _ in 0..50_000 { for (input, target) in &training_data { let input = SVector::from_column_slice(input); let target = SVector::from_column_slice(target); nn.train(&input, &target, 0.1); } } ``` Then get a prediction: ```rs let output = nn.forward(&SVector::from_column_slice(&[0.0, 1.0])); ``` The [full example](examples/predict_xor.rs) can produce decently accurate results with these parameters: ```rs Input: [0.0, 0.0], Output: 0.015919467, Expected: 0, Accuracy: 98.40805% Input: [0.0, 1.0], Output: 0.9832184, Expected: 1, Accuracy: 98.32184% Input: [1.0, 0.0], Output: 0.98321366, Expected: 1, Accuracy: 98.321365% Input: [1.0, 1.0], Output: 0.020730482, Expected: 0, Accuracy: 97.92695% ```