Skip to content

Latest commit

History

89 Commits

Folders and files

NameName
Last commit message
Last commit date

Repository files navigation

ConvNetJS

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 convnetjs.com

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 neuronsvarlayer_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 1layer_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 layerlayer_defs.push({type:'softmax',num_classes:10});varnet=newconvnetjs.Net();net.makeLayers(layer_defs);// forward a random data point through the networkvarx=newconvnetjs.Vol([0.3,-0.5]);varprob=net.forward(x);// prob is a Vol. Vols have a field .w that stores the raw data, and .dw that stores gradientsconsole.log('probability that x is class 0: '+prob.w[0]);// prints 0.50101vartrainer=newconvnetjs.SGDTrainer(net,{learning_rate:0.01,l2_decay:0.001});trainer.train(x,0);// train the network, specifying that x is class zerovarprob2=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:

varlayer_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 herelayer_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 pointlayer_defs.push({type:'pool',sx:2,stride:2});// output Vol is of size 16x16x16 herelayer_defs.push({type:'conv',sx:5,filters:20,stride:1,pad:2,activation:'relu'});// output Vol is of size 16x16x20 herelayer_defs.push({type:'pool',sx:2,stride:2});// output Vol is of size 8x8x20 herelayer_defs.push({type:'conv',sx:5,filters:20,stride:1,pad:2,activation:'relu'});// output Vol is of size 8x8x20 herelayer_defs.push({type:'pool',sx:2,stride:2});// output Vol is of size 4x4x20 herelayer_defs.push({type:'softmax',num_classes:10});// output Vol is of size 1x1x10 herenet=newconvnetjs.Net();net.makeLayers(layer_defs);// helpful utility for converting images into Vols is includedvarx=convnetjs.img_to_vol(document.getElementById('some_image'))varoutput_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 src/ and then compile the library into the build/ directory. The compilation script simply concatenates files in src/ and then minifies the result.

The compilation is done using an ant task: it compiles build/convnet.js by concatenating the source files in src/ and then minifies the result into build/convnet-min.js. Make sure you have ant installed (on Ubuntu you can simply sudo apt-get install it), then cd into compile/ directory and run:

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

The output files will be in build/

Use in Node

The library is also available on node.js:

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

License

MIT

About

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

Resources

Stars

1 star

Watchers

0 watching

Forks

Releases

Packages

Contributors

Languages