https://github.com/liquidcarrot/carrot
đĨ Evolutionary Neural Networks in JavaScript
https://github.com/liquidcarrot/carrot
browser easy-to-use javascript lstm machine-learning neat neural-networks neuro-evolution nodejs recurrent-neural-networks
Last synced: 2 months ago
JSON representation
đĨ Evolutionary Neural Networks in JavaScript
- Host: GitHub
- URL: https://github.com/liquidcarrot/carrot
- Owner: liquidcarrot
- License: mit
- Created: 2018-12-03T19:31:26.000Z (over 6 years ago)
- Default Branch: master
- Last Pushed: 2023-01-07T02:40:18.000Z (over 2 years ago)
- Last Synced: 2025-04-09T17:19:59.367Z (2 months ago)
- Topics: browser, easy-to-use, javascript, lstm, machine-learning, neat, neural-networks, neuro-evolution, nodejs, recurrent-neural-networks
- Language: JavaScript
- Homepage: https://liquidcarrot.io/carrot/
- Size: 17 MB
- Stars: 295
- Watchers: 17
- Forks: 33
- Open Issues: 103
-
Metadata Files:
- Readme: README.md
- Contributing: CONTRIBUTING.md
- Funding: .github/FUNDING.yml
- License: LICENSE
- Code of conduct: CODE_OF_CONDUCT.md
Awesome Lists containing this project
README
![]()
âšī¸ 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
Carrot is an architecture-free neural network library built around neuroevolution
Why / when should I use this?
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 forYou 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](https://liquidcarrot.io/example.flappy-bird/)
For Documentation, visit [here](https://liquidcarrot.github.io/carrot)
## Key Features
- [Simple docs](https://liquidcarrot.github.io/carrot) & [interactive examples](https://liquidcarrot.io/example.flappy-bird/)
- **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](https://liquidcarrot.io/example.flappy-bird/ "flappy bird playground")## Install
```bash
$ npm i @liquid-carrot/carrot
```Carrot files are hosted by JSDelivr
For prototyping or learning, use the latest version here:
```html
```
For production, link to a specific version number to avoid unexpected breakage from newer versions:
```html
```
## Getting Started
đĄ Want to be super knowledgeable about neuro-evolution in a few minutes?
Check out [this article](https://www.oreilly.com/radar/neuroevolution-a-different-kind-of-deep-learning/ "Neuro-evolution based deep learning") 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](https://www.youtube.com/watch?v=LHXXI4-IEns), from [@LearnedVector](https://github.com/LearnedVector), on YouTube
This is a simple **perceptron**:
.
How to build it with Carrot:
```javascript
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
```javascript
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
```javascript
let architect = require('@liquid-carrot/carrot').architect
let Layer = require('@liquid-carrot/carrot').Layerlet 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
```javascript
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
```javascript
let Network = require('@liquid-carrot/carrot').Networklet network = new Network([2, 2, 1]) // Builds a neural network with 5 neurons: 2 + 2 + 1
```Or implement custom algorithms with neuron-level control
```javascript
let Node = require('@liquid-carrot/carrot').Nodelet A = new Node() // neuron
let B = new Node() // neuronA.connect(B)
A.activate(0.5)
console.log(B.activate())
```## Try with
#### Data Sets
- [ ] [MNIST](https://www.npmjs.com/package/mnist)## 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](https://allcontributors.org/docs/en/emoji-key)):
Luis Carbonell
đģ đ¤ đ đ
Christian Echevarria
đģ đ đ
Daniel Ryan
đ đ
IviieMtz
â ī¸
Nicholas Szerman
đģ
tracy collins
đ
Manuel Raimann
đ đģ đ¤
This project follows the [all-contributors](https://github.com/all-contributors/all-contributors) specification. Contributions of any kind welcome!
## đŦ Contributing
[](https://github.com/liquidcarrot/carrot/issues)
Your contributions are always welcome! Please have a look at the [contribution guidelines](https://github.com/liquidcarrot/carrot/blob/master/CONTRIBUTING.md) first. đ
To build a community welcome to all, Carrot follows the [Contributor Covenant](https://github.com/liquidcarrot/carrot/blob/master/CODE_OF_CONDUCT.md) 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
[](https://www.patreon.com/liquidcarrot)[](https://www.patreon.com/liquidcarrot)
## Acknowledgements
A special thanks to:
[@wagenaartje](https://github.com/wagenaartje) for [Neataptic](https://github.com/wagenaartje/neataptic/) which was the starting point for this project
[@cazala](https://github.com/cazala) for [Synaptic](https://github.com/cazala/synaptic/) which pioneered architecture free neural networks in javascript and was the starting point for Neataptic
[@robertleeplummerjr](https://github.com/robertleeplummerjr) for [GPU.js](https://github.com/gpujs/gpu.js) which makes using GPU in JS easy and [Brain.js](https://github.com/BrainJS/brain.js) which has inspired Carrot's development