Very cool! ---david
On Friday, November 21, 2014 3:00:42 AM UTC+1, Chiyuan Zhang wrote: > > https://github.com/pluskid/Mocha.jl > Mocha is a Deep Learning framework for Julia <http://julialang.org/>, > inspired by the C++ Deep Learning framework Caffe > <http://caffe.berkeleyvision.org/>. Since this is the first time I post > announcement here, change logs of the last two releases are listed: > > v0.0.2 2014.11.20 > > - Infrastructure > - Ability to import caffe trained model > - Properly release all the allocated resources upon backend shutdown > - Network > - Sigmoid activation function > - Power, Split, Element-wise layers > - Local Response Normalization layer > - Channel Pooling layer > - Dropout Layer > - Documentation > - Complete MNIST demo > - Complete CIFAR-10 demo > - Major part of User's Guide > > <https://github.com/pluskid/Mocha.jl/blob/master/NEWS.md#v001-20141113>v0.0.1 > 2014.11.13 > > - Backend > - Pure Julia CPU > - Julia + C++ Extension CPU > - CUDA + cuDNN GPU > - Infrastructure > - Evaluate on validation set during training > - Automaticly saving and recovering from snapshots > - Network > - Convolution layer, mean and max pooling layer, fully connected > layer, softmax loss layer > - ReLU activation function > - L2 Regularization > - Solver > - SGD with momentum > - Documentation > - Demo code of LeNet on MNIST > - Tutorial document on the MNIST demo (half finished) > > > > Below is a copy of the README file: > ---------------------------------------------------------------- > > Mocha is a Deep Learning framework for Julia <http://julialang.org/>, > inspired by the C++ Deep Learning framework Caffe > <http://caffe.berkeleyvision.org/>. Mocha support multiple backends: > > - Pure Julia CPU Backend: Implemented in pure Julia; Runs out of the > box without any external dependency; Reasonably fast on small models > thanks > to Julia's LLVM-based just-in-time (JIT) compiler and Performance > Annotations > > <http://julia.readthedocs.org/en/latest/manual/performance-tips/#performance-annotations> > that > eliminate unnecessary bound checkings. > - CPU Backend with Native Extension: Some bottleneck computations > (Convolution and Pooling) have C++ implementations. When compiled and > enabled, could be faster than the pure Julia backend. > - CUDA + cuDNN: An interface to NVidia® cuDNN > <https://developer.nvidia.com/cuDNN> GPU accelerated deep learning > library. When run with CUDA GPU devices, could be much faster depending on > the size of the problem (e.g. on MNIST CUDA backend is roughly 20 times > faster than the pure Julia backend). > > <https://github.com/pluskid/Mocha.jl#installation>Installation > > To install the release version, simply run > > Pkg.add("Mocha") > > in Julia console. To install the latest development version, run the > following command instead: > > Pkg.clone("https://github.com/pluskid/Mocha.jl.git") > > Then you can run the built-in unit tests with > > Pkg.test("Mocha") > > to verify that everything is functioning properly on your machine. > <https://github.com/pluskid/Mocha.jl#hello-world>Hello World > > Please refer to the MNIST tutorial > <http://mochajl.readthedocs.org/en/latest/tutorial/mnist.html> on how > prepare the MNIST dataset for the following example. The complete code for > this example is located at examples/mnist/mnist.jl > <https://github.com/pluskid/Mocha.jl/blob/master/examples/mnist/mnist.jl>. > See below for detailed documentation of other tutorials and user's guide. > > using Mocha > > data = > HDF5DataLayer(name="train-data",source="train-data-list.txt",batch_size=64) > conv = > ConvolutionLayer(name="conv1",n_filter=20,kernel=(5,5),bottoms=[:data],tops=[:conv]) > pool = > PoolingLayer(name="pool1",kernel=(2,2),stride=(2,2),bottoms=[:conv],tops=[:pool]) > conv2 = > ConvolutionLayer(name="conv2",n_filter=50,kernel=(5,5),bottoms=[:pool],tops=[:conv2]) > pool2 = > PoolingLayer(name="pool2",kernel=(2,2),stride=(2,2),bottoms=[:conv2],tops=[:pool2]) > fc1 = > InnerProductLayer(name="ip1",output_dim=500,neuron=Neurons.ReLU(),bottoms=[:pool2], > tops=[:ip1]) > fc2 = InnerProductLayer(name="ip2",output_dim=10,bottoms=[:ip1],tops=[:ip2]) > loss = SoftmaxLossLayer(name="loss",bottoms=[:ip2,:label]) > > sys = System(CuDNNBackend())init(sys) > > common_layers = [conv, pool, conv2, pool2, fc1, fc2] > net = Net("MNIST-train", sys, [data, common_layers..., loss]) > > params = SolverParameters(max_iter=10000, regu_coef=0.0005, momentum=0.9, > lr_policy=LRPolicy.Inv(0.01, 0.0001, 0.75)) > solver = SGD(params) > # report training progress every 100 iterationsadd_coffee_break(solver, > TrainingSummary(), every_n_iter=100) > # save snapshots every 5000 iterationsadd_coffee_break(solver, > Snapshot("snapshots", auto_load=true), > every_n_iter=5000) > # show performance on test data every 1000 iterations > data_test = > HDF5DataLayer(name="test-data",source="test-data-list.txt",batch_size=100) > accuracy = AccuracyLayer(name="test-accuracy",bottoms=[:ip2, :label]) > test_net = Net("MNIST-test", sys, [data_test, common_layers..., > accuracy])add_coffee_break(solver, ValidationPerformance(test_net), > every_n_iter=1000) > solve(solver, net) > destroy(net)destroy(test_net)shutdown(sys) > > <https://github.com/pluskid/Mocha.jl#documentation>Documentation > > The Mocha documentation is hosted on readthedocs.org > <http://mochajl.readthedocs.org/>. >
