Github url


by karpathy

karpathy /convnetjs

Deep Learning in Javascript. Train Convolutional Neural Networks (or ordinary ones) in your browser.

10.0K Stars 2.0K Forks Last release: almost 6 years ago (2014.08.31) MIT License 89 Commits 1 Releases

Available items

No Items, yet!

The developer of this repository has not created any items for sale yet. Need a bug fixed? Help with integration? A different license? Create a request here:


ConvNetJS is a Javascript implementation of Neural networks, together with nice browser-based demos. It currently supports:

  • Common Neural Network modules (fully connected layers, non-linearities)
  • Classification (SVM/Softmax) and Regression (L2) cost functions
  • Ability to specify and train Convolutional Networks that process images
  • An experimental Reinforcement Learning module, based on Deep Q Learning

For much more information, see the main page at

Note: I am not actively maintaining ConvNetJS anymore because I simply don't have time. I think the npm repo might not work at this point.

Online Demos

Example Code

Here's a minimum example of defining a 2-layer neural network and training it on a single data point:

// species a 2-layer neural network with one hidden layer of 20 neurons var layer\_defs = []; // input layer declares size of input. here: 2-D data // ConvNetJS works on 3-Dimensional volumes (sx, sy, depth), but if you're not dealing with images // then the first two dimensions (sx, sy) will always be kept at size 1 layer\_defs.push({type:'input', out\_sx:1, out\_sy:1, out\_depth:2}); // declare 20 neurons, followed by ReLU (rectified linear unit non-linearity) layer\_defs.push({type:'fc', num\_neurons:20, activation:'relu'}); // declare the linear classifier on top of the previous hidden layer layer\_defs.push({type:'softmax', num\_classes:10}); var net = new convnetjs.Net(); net.makeLayers(layer\_defs); // forward a random data point through the network var x = new convnetjs.Vol([0.3, -0.5]); var prob = net.forward(x); // prob is a Vol. Vols have a field .w that stores the raw data, and .dw that stores gradients console.log('probability that x is class 0: ' + prob.w[0]); // prints 0.50101 var trainer = new convnetjs.SGDTrainer(net, {learning\_rate:0.01, l2\_decay:0.001}); trainer.train(x, 0); // train the network, specifying that x is class zero var prob2 = net.forward(x); console.log('probability that x is class 0: ' + prob2.w[0]); // now prints 0.50374, slightly higher than previous 0.50101: the networks // weights have been adjusted by the Trainer to give a higher probability to // the class we trained the network with (zero)

and here is a small Convolutional Neural Network if you wish to predict on images:

var layer\_defs = []; layer\_defs.push({type:'input', out\_sx:32, out\_sy:32, out\_depth:3}); // declare size of input // output Vol is of size 32x32x3 here layer\_defs.push({type:'conv', sx:5, filters:16, stride:1, pad:2, activation:'relu'}); // the layer will perform convolution with 16 kernels, each of size 5x5. // the input will be padded with 2 pixels on all sides to make the output Vol of the same size // output Vol will thus be 32x32x16 at this point layer\_defs.push({type:'pool', sx:2, stride:2}); // output Vol is of size 16x16x16 here layer\_defs.push({type:'conv', sx:5, filters:20, stride:1, pad:2, activation:'relu'}); // output Vol is of size 16x16x20 here layer\_defs.push({type:'pool', sx:2, stride:2}); // output Vol is of size 8x8x20 here layer\_defs.push({type:'conv', sx:5, filters:20, stride:1, pad:2, activation:'relu'}); // output Vol is of size 8x8x20 here layer\_defs.push({type:'pool', sx:2, stride:2}); // output Vol is of size 4x4x20 here layer\_defs.push({type:'softmax', num\_classes:10}); // output Vol is of size 1x1x10 here net = new convnetjs.Net(); net.makeLayers(layer\_defs); // helpful utility for converting images into Vols is included var x = convnetjs.img\_to\_vol(document.getElementById('some\_image')) var output\_probabilities\_vol = net.forward(x)

Getting Started

A Getting Started tutorial is available on main page.

The full Documentation can also be found there.

See the releases page for this project to get the minified, compiled library, and a direct link to is also available below for convenience (but please host your own copy)

Compiling the library from src/ to build/

If you would like to add features to the library, you will have to change the code in


and then compile the library into the


directory. The compilation script simply concatenates files in


and then minifies the result.

The compilation is done using an ant task: it compiles


by concatenating the source files in


and then minifies the result into


. Make sure you have ant installed (on Ubuntu you can simply sudo apt-get install it), then cd into


directory and run:

$ ant -lib yuicompressor-2.4.8.jar -f build.xml

The output files will be in


Use in Node

The library is also available on node.js:

  1. Install it:
    $ npm install convnetjs
  2. Use it:
    var convnetjs = require("convnetjs");



We use cookies. If you continue to browse the site, you agree to the use of cookies. For more information on our use of cookies please see our Privacy Policy.