JavaScripting

The definitive source of the best
JavaScript libraries, frameworks, and plugins.


  • ×

    πŸ₯• Multi-threaded Self-Assembling Neural Networks in Node.js & Browser
    Filed under  β€Ί 

    • 🔾27%Overall
    • 162
    • 19 hours
    • 🕩21
    • 👥3

    Carrot Logo

    Build Status via Travis CI Codacy Badge Coverage Status Join the chat at https://gitter.im/carrot-ai/community Carrot's License Made with love

    Carrot is a flexible multi-threaded neural network AI Library for Node.js with neuro-evolution capabilities.

    For Documentation, visit here

    Key Features

    • Simple docs & interactive examples
    • Neuro-evolution & population based training
    • Multi-threading & GPU (coming soon)
    • Preconfigured GRU, LSTM, NARX Networks
    • Mutable Neurons, Layers, Groups, and Networks
    • SVG Network Visualizations using D3.js

    Demos

    flappy bird neuro-evolution demo
    Flappy bird neuro-evolution

    Install

    $ npm i @liquid-carrot/carrot
    

    Carrot files are hosted by JSDelivr

    For prototyping or learning, use the latest version here:

    <script src="https://cdn.jsdelivr.net/npm/@liquid-carrot/carrot/dist/carrot.umd2.min.js"></script>
    

    For production, link to a specific version number to avoid unexpected breakage from newer versions:

    <script src="https://cdn.jsdelivr.net/npm/@liquid-carrot/carrot@0.3.12/dist/carrot.umd2.min.js"></script>
    

    Getting Started

    This is a simple perceptron:

    perceptron.

    How to build it with Carrot:

    let { architect } = require('@liquid-carrot/carrot');
    
    // The example Perceptron you see above with 4 inputs, 5 hidden, and 1 output neuron
    let simplePerceptron = new architect.Perceptron(4, 5, 1);
    

    Building networks is easy with 6 built-in networks

    let { architect } = require('@liquid-carrot/carrot');
    
    let LSTM = new architect.LSTM(4, 5, 1);
    
    // Add as many hidden layers as needed
    let Perceptron = new architect.Perceptron(4, 5, 20, 5, 10, 1);
    

    Building custom network architectures

    let architect = require('@liquid-carrot/carrot').architect
    let Layer = require('@liquid-carrot/carrot').Layer
    
    let input = new Layer.Dense(1);
    let hidden1 = new Layer.LSTM(5);
    let hidden2 = new Layer.GRU(1);
    let output = new Layer.Dense(1);
    
    // connect however you want
    input.connect(hidden1);
    hidden1.connect(hidden2);
    hidden2.connect(output);
    
    let network = architect.Construct([input, hidden1, hidden2, output]);
    

    Networks also shape themselves with neuro-evolution

    let { Network, methods } = require('@liquid-carrot/carrot');
    
    // this network learns the XOR gate (through neuro-evolution)
    async function execute () {
      // no hidden layers...
       var network = new Network(2,1);
    
       // XOR dataset
       var trainingSet = [
           { input: [0,0], output: [0] },
           { input: [0,1], output: [1] },
           { input: [1,0], output: [1] },
           { input: [1,1], output: [0] }
       ];
    
       await network.evolve(trainingSet, {
           mutation: methods.mutation.FFW,
           equal: true,
           error: 0.05,
           elitism: 5,
           mutation_rate: 0.5
       });
    
       // and it works!
       network.activate([0,0]); // 0.2413
       network.activate([0,1]); // 1.0000
       network.activate([1,0]); // 0.7663
       network.activate([1,1]); // 0.008
    }
    
    execute();
    

    Build vanilla neural networks

    let Network = require('@liquid-carrot/carrot').Network
    
    let network = new Network([2, 2, 1]) // Builds a neural network with 5 neurons: 2 + 2 + 1
    

    Or implement custom algorithms with neuron-level control

    let Node = require('@liquid-carrot/carrot').Node
    
    let A = new Node() // neuron
    let B = new Node() // neuron
    
    A.connect(B)
    A.activate(0.5)
    console.log(B.activate())
    

    Try with

    Data Sets

    Contributors ✨

    This project exists thanks to all the people who contribute. We can't do it without you! πŸ™‡

    Thanks goes to these wonderful people (emoji key):

    Luis Carbonell
    Luis Carbonell

    πŸ’» πŸ€” πŸ‘€ πŸ“–
    Christian Echevarria
    Christian Echevarria

    πŸ’» πŸ“– πŸš‡
    Daniel Ryan
    Daniel Ryan

    πŸ› πŸ‘€
    IviieMtz
    IviieMtz

    ⚠️
    Nicholas Szerman
    Nicholas Szerman

    πŸ’»

    This project follows the all-contributors specification. Contributions of any kind welcome!

    πŸ’¬ Contributing

    Carrot's GitHub Issues

    Your contributions are always welcome! Please have a look at the contribution guidelines first. πŸŽ‰

    To build a community welcome to all, Carrot follows the Contributor Covenant Code of Conduct.

    And finally, a big thank you to all of you for supporting! πŸ€—

    Planned Features [ ] Performance Enhancements [ ] GPU Acceleration [ ] Tests [ ] Benchmarks [ ] Matrix Multiplications [ ] Tests [ ] Benchmarks [ ] Clustering | Multi-Threading [ ] Tests [ ] Benchmarks [ ] Syntax Support [ ] Callbacks [ ] Promises [ ] Streaming [ ] Async/Await [ ] Math Support [ ] Big Numbers [ ] Small Numbers

    Patrons

    Carrot's Patrons

    Silver Patrons
    D-Nice Profile Pitcure
    D-Nice
    Bronze Patrons
    Kappaxbeta's Profile Pitcure
    Kappaxbeta
    Patrons
    DollarBizClub Logo
    DollarBizClub

    Become a Patron

    Acknowledgements

    A special thanks to Neataptic, Synaptic, and Brain.js!

    Carrotβ„’ was largely brought about by inspiration from these great libraries.

    Show All