Carrot
๐ฅ Evolutionary Neural Networks in JavaScript
โน๏ธ The new TypeScript version is coming! If you would like to try the expiremental version please clone the repository and checkout the typescript branch of the project. Docs for this new version can temporarily be found here The project is written primarily in JavaScript, distributed under the MIT License license, first published in 2018. Key topics include: browser, easy-to-use, javascript, lstm, machine-learning.
Whenever you have a problem that you:
- Don't know how-to solve
- Don't want to design a custom network for
- Want to discover the ideal neural-network structure for
You can use Carrot's ability to design networks of arbitrary complexity by itself to solve whatever problem you have. If you want to see Carrot designing a neural-network to play flappy-bird check here
</p>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

<br>
Flappy bird neuro-evolution
Install
bash$ npm i @liquid-carrot/carrot
Carrot files are hosted by JSDelivr
For prototyping or learning, use the latest version here:
html<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:
html<script src="https://cdn.jsdelivr.net/npm/@liquid-carrot/carrot@0.3.17/dist/carrot.umd2.min.js"></script>
Getting Started
๐ก Want to be super knowledgeable about neuro-evolution in a few minutes?
Check out this article by the creator of NEAT, Kenneth Stanley
๐ก Curious about how neural-networks can understand speech and video?
Check out this video on Recurrent Neural Networks, from @LearnedVector, on YouTube
This is a simple perceptron:
.
How to build it with Carrot:
javascriptlet { 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
javascriptlet { 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
javascriptlet 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
javascriptlet { 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
javascriptlet 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
javascriptlet 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):
<!-- ALL-CONTRIBUTORS-LIST:START - Do not remove or modify this section --> <!-- prettier-ignore-start --> <!-- markdownlint-disable --> <table> <tr> <td align="center"><a href="https://liquidcarrot.io/"><img src="https://avatars3.githubusercontent.com/u/21148993?v=4" width="100px;" alt=""/><br /><sub><b>Luis Carbonell</b></sub></a><br /><a href="https://github.com/liquidcarrot/carrot/commits?author=luiscarbonell" title="Code">๐ป</a> <a href="#ideas-luiscarbonell" title="Ideas, Planning, & Feedback">๐ค</a> <a href="https://github.com/liquidcarrot/carrot/pulls?q=is%3Apr+reviewed-by%3Aluiscarbonell" title="Reviewed Pull Requests">๐</a> <a href="https://github.com/liquidcarrot/carrot/commits?author=luiscarbonell" title="Documentation">๐</a></td> <td align="center"><a href="http://liquidcarrot.io"><img src="https://avatars2.githubusercontent.com/u/23618650?v=4" width="100px;" alt=""/><br /><sub><b>Christian Echevarria</b></sub></a><br /><a href="https://github.com/liquidcarrot/carrot/commits?author=christianechevarria" title="Code">๐ป</a> <a href="https://github.com/liquidcarrot/carrot/commits?author=christianechevarria" title="Documentation">๐</a> <a href="#infra-christianechevarria" title="Infrastructure (Hosting, Build-Tools, etc)">๐</a></td> <td align="center"><a href="https://github.com/dan-ryan"><img src="https://avatars1.githubusercontent.com/u/775672?v=4" width="100px;" alt=""/><br /><sub><b>Daniel Ryan</b></sub></a><br /><a href="https://github.com/liquidcarrot/carrot/issues?q=author%3Adan-ryan" title="Bug reports">๐</a> <a href="https://github.com/liquidcarrot/carrot/pulls?q=is%3Apr+reviewed-by%3Adan-ryan" title="Reviewed Pull Requests">๐</a></td> <td align="center"><a href="https://github.com/IviieMtz"><img src="https://avatars0.githubusercontent.com/u/50965172?v=4" width="100px;" alt=""/><br /><sub><b>IviieMtz</b></sub></a><br /><a href="https://github.com/liquidcarrot/carrot/commits?author=IviieMtz" title="Tests">โ ๏ธ</a></td> <td align="center"><a href="https://github.com/nicszerman"><img src="https://avatars3.githubusercontent.com/u/14032356?v=4" width="100px;" alt=""/><br /><sub><b>Nicholas Szerman</b></sub></a><br /><a href="https://github.com/liquidcarrot/carrot/commits?author=nicszerman" title="Code">๐ป</a></td> <td align="center"><a href="http://www.threeceemedia.com"><img src="https://avatars3.githubusercontent.com/u/1046501?v=4" width="100px;" alt=""/><br /><sub><b>tracy collins</b></sub></a><br /><a href="https://github.com/liquidcarrot/carrot/issues?q=author%3Atracycollins" title="Bug reports">๐</a></td> <td align="center"><a href="https://github.com/raimannma"><img src="https://avatars3.githubusercontent.com/u/26171511?v=4" width="100px;" alt=""/><br /><sub><b>Manuel Raimann</b></sub></a><br /><a href="https://github.com/liquidcarrot/carrot/issues?q=author%3Araimannma" title="Bug reports">๐</a> <a href="https://github.com/liquidcarrot/carrot/commits?author=raimannma" title="Code">๐ป</a> <a href="#ideas-raimannma" title="Ideas, Planning, & Feedback">๐ค</a></td> </tr> </table> <!-- markdownlint-enable --> <!-- prettier-ignore-end --> <!-- ALL-CONTRIBUTORS-LIST:END -->This project follows the all-contributors specification. Contributions of any kind welcome!
๐ฌ Contributing
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! ๐ค
<details><summary><strong>Planned Features</strong></summary> * [ ] 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 </details>Patrons
Acknowledgements
A special thanks to:
@wagenaartje for Neataptic which was the starting point for this project
@cazala for Synaptic which pioneered architecture free neural networks in javascript and was the starting point for Neataptic
@robertleeplummerjr for GPU.js which makes using GPU in JS easy and Brain.js which has inspired Carrot's development
Contributors
Showing top 10 contributors by commit count.

