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

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

Mentor

Mentor follows the builder pattern to incrementally build properties for the training session and delay any expensive computations until the go routine is called.

NeuralNet

A neural net.

Sample

A sample used to train a disciple during supervised learning.

SampleView

A sample view used to train a disciple during supervised learning.

Enums

Activation

Represents an activation function.

Criterion

Cirterias after which the learning process holds.

ErrorKind

Kinds of errors that may occure while using this crate.

LogConfig

Logging interval for logging stats during the learning process.

Scheduling

Sample scheduling strategy while learning.

Traits

Predict

Types that can predict data based on a one-dimensional input data range.

Type Definitions

MentorBuilder

A fresh mentor which is completely uninitialized, yet.

Result

Result type for procedures of this crate.