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/>.

Reply via email to