Crate prophet [−] [src]
A neural net implementation focused on sequential performance.
The API works as follows:
- The general shape of neural networks is defined with a topology.
- Topologies can be consumed by a mentor to train it with given training samples.
- After successful training the neural net's
predict
method can be used to predict data.
Currently this library only supports supervised learning and fully connected layers.
Example
The code below demonstrates how to train a neural net to be a logical-OR operator.
#[macro_use] extern crate prophet; use prophet::prelude::*; use Activation::Tanh; let (t, f) = (1.0, -1.0); // static samples are easily generated with this macro! let train_samples = samples![ [f, f] => [f], // ⊥ ∧ ⊥ → ⊥ [f, t] => [t], // ⊥ ∧ ⊤ → ⊤ [t, f] => [t], // ⊤ ∧ ⊥ → ⊤ [t, t] => [t] // ⊤ ∧ ⊤ → ⊤ ]; // create the topology for our neural network let top = Topology::input(2) // has two input neurons .layer(3, Tanh) // with 3 neurons in the first hidden layer .layer(2, Tanh) // and 2 neurons in the second hidden layer .output(1, Tanh); // and 1 neuron in the output layer let mut net = top.train(train_samples) .learn_rate(0.25) // use the given learn rate .learn_momentum(0.6) // use the given learn momentum .log_config(LogConfig::Iterations(100)) // log state every 100 iterations .scheduling(Scheduling::Random) // use random sample scheduling .criterion(Criterion::RecentMSE(0.05)) // train until the recent MSE is below 0.05 .go() // start the training session .unwrap(); // be ashamed to unwrap a Result // PROFIT! now you can use the neural network to predict data! assert_eq!(net.predict(&[f, f])[0].round(), f); assert_eq!(net.predict(&[f, t])[0].round(), t);
Example
A more minimalistic example code for the same logical-OR operation:
// create the topology for our neural network let mut net = Topology::input(2) // has two input neurons .layer(3, Tanh) // with 3 neurons in the first hidden layer .layer(2, Tanh) // and 2 neurons in the second hidden layer .output(1, Tanh) // and 1 neuron in the output layer // train it for the given samples .train(samples![ [f, f] => [f], // ⊥ ∧ ⊥ → ⊥ [f, t] => [t], // ⊥ ∧ ⊤ → ⊤ [t, f] => [t], // ⊤ ∧ ⊥ → ⊤ [t, t] => [t] // ⊤ ∧ ⊤ → ⊤ ]) .go() // start the training session .unwrap(); // and unwrap the Result assert_eq!(net.predict(&[f, f])[0].round(), f); assert_eq!(net.predict(&[f, t])[0].round(), t);
Modules
mentor |
The Mentor is used to create and train neural networks in order to prevent a situation where a neural network is defined and used to predict data without any training beforehand to verify a certain metric of quality for the predicted data. |
prelude |
The prophet prelude publicly imports all propet modules the user needs in order to create, train and use neural networks. |
topology |
Provides operations, data structures and error definitions for Disciple objects which form the basis for topologies of neural networks. |
Macros
samples |
Creates a vector of samples. |
Structs
NeuralNet |
A neural net. |
Enums
Activation |
Represents an activation function. |
ErrorKind |
Kinds of errors that may occure while using this crate. |
Traits
Predict |
Types that can predict data based on a one-dimensional input data range. |
Type Definitions
Result |
Result type for procedures of this crate. |