The VELES

Distributed platform for rapid Deep learning application development.



You change parameters. Veles takes the rest.

Download

Written on Python, uses OpenCL or CUDA, employs Flow-Based Programming, under Apache 2.0.

Neural networks done right. With a human face.

veles.znicz NN engine focuses on performance and flexibility. It has little hard-coded entities and enables training of all the widely recognized topologies, such as fully connected nets, convolutional nets, reccurent nets etc.

In-depth introspection and rich debugging facilities helps to develop nets quickly with predictable result.

All backends have the same interface and yield the same calculation results or accuracy, with single or double precision.

ZeroMQ-based star topology of distributed operation handles up to 100 nodes, depending on the task. Optionally, some compression can be applied. The state of things is sent to the Web Status Server.

The whole thing is fault tolerant, the death of a node does not cause the master stop. You can add new nodes dynamically, at any time, with any backends.

Snapshotting feature allows recovering from any disaster, restart the training in a different mode and with a different backend.

Share your experiments.

Upload your workflows to Forge. Access others' work. See what Veles is capable of.

Veles is usable from IPython or IPython Notebook.
In [1]:
import veles
In [2]:
launcher=veles("veles/znicz/samples/MnistSimple/mnist.py", stealth=True, backend="ocl", matplotlib_backend="WebAgg")
 _   _ _____ _     _____ _____  
| | | |  ___| |   |  ___/  ___|  Version 0.8.9 Tue, 12 May 2015 11:51:57 +0300
| | | | |__ | |   | |__ \ `--.   Copyright © 2013 Samsung Electronics Co., Ltd.
| | | |  __|| |   |  __| `--. \  Released under Apache 2.0 license.
\ \_/ / |___| |___| |___/\__/ /  https://velesnet.ml
 \___/\____/\_____|____/\____/   https://github.com/samsung/veles/issues

INFO:Main:Loading workflow "/.../znicz/samples/MnistSimple/mnist.py"...
INFO:Main:Applying the configuration from /.../znicz/samples/MnistSimple/mnist_config.py...
INFO:Launcher:My Python is CPython 3.4.1
INFO:Launcher:My PID is 32514
INFO:Launcher:My time is 2015-05-14 09:52:16.789127
INFO:Launcher:My ID is 7bc792aa-e93e-4819-88f9-53c64a970ec5
INFO:Launcher:My log ID is 7bc792aa-e93e-4819-88f9-53c64a970ec5
INFO:Main:Created <MnistSimple.mnist.MnistWorkflow object at 0x7f8fc4f18f60> with 21 units
INFO:GraphicsServer:Publishing to inproc://veles-plots; ipc:///tmp/veles-ipc-plots-ws2s7i8s; epgm://eth2;239.192.1.1:16080; epgm://vmnet1;239.192.1.1:9052; epgm://vmnet8;239.192.1.1:47888
INFO:OpenCLDevice:Selected the following OpenCL configuration:
+-------------------------------------------+--------+--------+------------+---------+
| device                                    |  dtype | rating | BLOCK_SIZE | version |
+-------------------------------------------+--------+--------+------------+---------+
| NVIDIA Corporation/GeForce GTX TITAN/4318 | double | 1.000  |     27     |   1.1   |
| NVIDIA Corporation/GeForce GTX TITAN/4318 | float  | 1.000  |     30     |   1.1   |
+-------------------------------------------+--------+--------+------------+---------+
INFO:MnistWorkflow:Initializing units in MnistWorkflow...
INFO:MnistLoader:Loading from original MNIST files...
INFO:MnistLoader:Minibatch size is set to 88
INFO:MnistLoader:Samples number: test: 0, validation: 10000, train: 60000
INFO:MnistLoader:Normalizing to linear...
INFO:MnistLoader:There are 10 unique labels
INFO:MnistLoader:train label cardinalities: min: 5421 ("5"), max: 6742 ("1"), avg: 6000, σ: 322 (5%)
INFO:MnistLoader:validation label cardinalities: min: 892 ("5"), max: 1135 ("1"), avg: 1000, σ: 59 (5%)
INFO:MnistLoader:OK: train and validation labels have the same distributions (Χ-square test's p-value is 1.000)
INFO:MnistLoader:Will try to store the entire dataset on the device
100% |#####################| 21 units were initialized
INFO:Launcher:Reactor is running
INFO:Main:Returned the control
INFO:MnistLoader:Served 88 samples (0 epochs, 0.1% current); jobs failed: 0/pending: 1
INFO:MnistLoader:Last minibatch (10000 total) of class VALIDATION served in epoch 0
INFO:DecisionGD:Epoch 0 class validation n_err 8718 (87.18%) in 0.11 sec
INFO:GraphicsClient:Launching WebAgg instance on port 8081
INFO:GraphicsClient:Graphics client is running in process 32641
INFO:Launcher:Found out the WebAgg port: 8081
INFO:MnistLoader:Last minibatch (60000 total) of class TRAIN served in epoch 1
INFO:DecisionGD:Epoch 1 class train n_err 8126 (13.54%) in 1.28 sec
INFO:MnistLoader:Last minibatch (10000 total) of class VALIDATION served in epoch 1
INFO:DecisionGD:Epoch 1 class validation n_err 951 (9.51%) in 0.13 sec
INFO:MnistLoader:Last minibatch (60000 total) of class TRAIN served in epoch 2
INFO:DecisionGD:Epoch 2 class train n_err 5467 (9.11%) in 1.15 sec
INFO:MnistLoader:Last minibatch (10000 total) of class VALIDATION served in epoch 2
INFO:DecisionGD:Epoch 2 class validation n_err 858 (8.58%) in 0.12 sec
INFO:MnistLoader:Last minibatch (60000 total) of class TRAIN served in epoch 3
INFO:DecisionGD:Epoch 3 class train n_err 4937 (8.23%) in 1.17 sec
INFO:MnistLoader:Last minibatch (10000 total) of class VALIDATION served in epoch 3
INFO:DecisionGD:Epoch 3 class validation n_err 764 (7.64%) in 0.12 sec
INFO:MnistLoader:Last minibatch (60000 total) of class TRAIN served in epoch 4
INFO:DecisionGD:Epoch 4 class train n_err 4462 (7.44%) in 1.13 sec
INFO:MnistLoader:Last minibatch (10000 total) of class VALIDATION served in epoch 4
INFO:DecisionGD:Epoch 4 class validation n_err 787 (7.87%) in 0.12 sec
INFO:MnistLoader:Last minibatch (60000 total) of class TRAIN served in epoch 5
INFO:DecisionGD:Epoch 5 class train n_err 3993 (6.66%) in 1.18 sec
INFO:MnistLoader:Last minibatch (10000 total) of class VALIDATION served in epoch 5
INFO:DecisionGD:Epoch 5 class validation n_err 628 (6.28%) in 0.12 sec
INFO:MnistLoader:Last minibatch (60000 total) of class TRAIN served in epoch 6
INFO:DecisionGD:Epoch 6 class train n_err 3659 (6.10%) in 1.18 sec
INFO:MnistLoader:Last minibatch (10000 total) of class VALIDATION served in epoch 6
INFO:DecisionGD:Epoch 6 class validation n_err 612 (6.12%) in 0.12 sec
INFO:MnistLoader:Last minibatch (60000 total) of class TRAIN served in epoch 7
INFO:DecisionGD:Epoch 7 class train n_err 3309 (5.51%) in 1.22 sec
INFO:MnistLoader:Last minibatch (10000 total) of class VALIDATION served in epoch 7
INFO:DecisionGD:Epoch 7 class validation n_err 533 (5.33%) in 0.12 sec
INFO:MnistLoader:Last minibatch (60000 total) of class TRAIN served in epoch 8
INFO:DecisionGD:Epoch 8 class train n_err 2999 (5.00%) in 1.12 sec
INFO:MnistLoader:Last minibatch (10000 total) of class VALIDATION served in epoch 8
INFO:DecisionGD:Epoch 8 class validation n_err 523 (5.23%) in 0.12 sec

In [3]:
launcher.pause()
INFO:ThreadPool:ThreadPool with 2 threads has been suspended

In [4]:
%matplotlib inline
In [5]:
launcher.workflow.units
Out[5]:
[veles.plumbing.StartPoint "Start of MnistWorkflow",
veles.plumbing.EndPoint "End of MnistWorkflow",
<veles.plumbing.Repeater object at 0x7f8fc4f1def0>,
<MnistSimple.loader_mnist.MnistLoader object at 0x7f8ff17c20f0>,
<veles.znicz.all2all.All2AllTanh object at 0x7f8fc4f28ac8>,
<veles.znicz.all2all.All2AllSoftmax object at 0x7f8fc4f38358>,
<veles.znicz.evaluator.EvaluatorSoftmax object at 0x7f8fc4f28320>,
<veles.znicz.decision.DecisionGD object at 0x7f8fc4f38e48>,
<veles.znicz.nn_units.NNSnapshotter object at 0x7f8fc4ec6198>,
<veles.interaction.Shell object at 0x7f8fc4ec67f0>,
<veles.znicz.gd.GDSoftmax object at 0x7f8fc4f38978>,
<veles.znicz.gd.GDTanh object at 0x7f8fc4ed32e8>,
veles.plotting_units.SlaveStats "Slave Iteration Timings",
veles.plotting_units.AccumulatingPlotter "Errors",
veles.plotting_units.AccumulatingPlotter "Errors",
veles.plotting_units.AccumulatingPlotter "Errors",
veles.plotting_units.MatrixPlotter "Validation matrix",
veles.plotting_units.MatrixPlotter "Train matrix",
veles.plotting_units.AccumulatingPlotter "Last layer max gradient sum",
veles.plotting_units.AccumulatingPlotter "Last layer max gradient sum",
veles.plotting_units.AccumulatingPlotter "Last layer max gradient sum"]
In [10]:
plotter = launcher.workflow["Validation matrix"]
In [11]:
plotter.set_matplotlib(plotter.import_matplotlib())
In [12]:
plotter.redraw()
Out[12]:
Confusion matrix
In [13]:
launcher.workflow[4]
Out[13]:
<veles.znicz.all2all.All2AllTanh object at 0x7f8fc4f28ac8>
In [14]:
launcher.workflow[4].weights.map_read()
In [15]:
launcher.workflow[4].weights.mem
Out[15]:
array([[ 0.01985305,  0.04555232, -0.00427397, ..., -0.03428014,
  -0.01746353, -0.02500474],
 [-0.044922  , -0.04528784, -0.0008402 , ..., -0.00028497,
   0.00180022, -0.029078  ],
 [-0.05103011,  0.02148511, -0.02060127, ...,  0.0284697 ,
  -0.02565062,  0.03231564],
 ...,
 [ 0.00910947,  0.04012665,  0.02957316, ...,  0.00426198,
  -0.04464243,  0.03306964],
 [-0.00470487,  0.00943439,  0.00882221, ...,  0.00947015,
   0.00919432, -0.00080211],
 [-0.02244768,  0.02433176, -0.03893734, ..., -0.02918781,
   0.00433979, -0.02979604]])
In [3]:
launcher=veles("veles/znicz/samples/YaleFaces/yale_faces.py", "-", "root.yalefaces.decision.max_epochs=20;root.common.disable.publishing=True", stealth=True, backend="ocl", matplotlib_backend="WebAgg")
 _   _ _____ _     _____ _____  
| | | |  ___| |   |  ___/  ___|  Version 0.8.9 Thu, 14 May 2015 11:24:59 +0300
| | | | |__ | |   | |__ \ `--.   Copyright © 2013 Samsung Electronics Co., Ltd.
| | | |  __|| |   |  __| `--. \  Released under Apache 2.0 license.
\ \_/ / |___| |___| |___/\__/ /  https://velesnet.ml
 \___/\____/\_____|____/\____/   https://github.com/samsung/veles/issues

INFO:Main:Loading workflow "/.../Development/Veles/veles/znicz/samples/YaleFaces/yale_faces.py"...
INFO:Main:Applying the configuration from /.../Development/Veles/veles/znicz/samples/YaleFaces/yale_faces_config.py...
INFO:Launcher:My Python is CPython 3.4.1
INFO:Launcher:My PID is 11871
INFO:Launcher:My time is 2015-05-14 14:51:49.385228
INFO:Launcher:My ID is 9aa05302-c6b6-4e18-9c70-a0d10b7cb0fe
INFO:Launcher:My log ID is 9aa05302-c6b6-4e18-9c70-a0d10b7cb0fe
INFO:Main:Created YaleFaces.yale_faces.YaleFacesWorkflow "FullyConnected_YaleFaces" with 17 units
INFO:GraphicsServer:Publishing to inproc://veles-plots; ipc:///tmp/veles-ipc-plots-zha0g7bl; epgm://eth2;239.192.1.1:29162; epgm://vmnet1;239.192.1.1:59382; epgm://vmnet8;239.192.1.1:28133
INFO:OpenCLDevice:Selected the following OpenCL configuration:
+-------------------------------------------+--------+--------+------------+---------+
| device                                    |  dtype | rating | BLOCK_SIZE | version |
+-------------------------------------------+--------+--------+------------+---------+
| NVIDIA Corporation/GeForce GTX TITAN/4318 | double | 1.000  |     27     |   1.1   |
| NVIDIA Corporation/GeForce GTX TITAN/4318 | float  | 1.000  |     30     |   1.1   |
+-------------------------------------------+--------+--------+------------+---------+
INFO:YaleFacesWorkflow:Initializing units in FullyConnected_YaleFaces...
INFO:FullBatchAutoLabelFileImageLoader:Scanning /data/veles/datasets/CroppedYale...
INFO:FullBatchAutoLabelFileImageLoader:Found 2414 samples of shape (192, 168) (0 TEST, 0 VALIDATION, 2414 TRAIN)
INFO:FullBatchAutoLabelFileImageLoader:Reading labels...
100% |#################################|
INFO:FullBatchAutoLabelFileImageLoader:There are 38 unique labels
INFO:FullBatchAutoLabelFileImageLoader:train label cardinalities: min: 49 ("yaleB22"), max: 59 ("yaleB06"), avg: 54, σ: 2 (3%)
INFO:FullBatchAutoLabelFileImageLoader:validation label cardinalities: min: 5 ("yaleB11"), max: 15 ("yaleB22"), avg: 9, σ: 2 (22%)
INFO:FullBatchAutoLabelFileImageLoader:OK: train and validation labels have the same distributions (Χ-square test's p-value is 1.000)
Loading 2414x1 images |#####################| 100%
INFO:FullBatchAutoLabelFileImageLoader:Minibatch size is set to 40
INFO:FullBatchAutoLabelFileImageLoader:Samples number: test: 0, validation: 362, train: 2052
INFO:FullBatchAutoLabelFileImageLoader:Normalizing to mean_disp...
INFO:FullBatchAutoLabelFileImageLoader:Will try to store the entire dataset on the device
INFO:YaleFacesWorkflow:Setting <veles.znicz.all2all.All2AllSoftmax object at 0x7f98652c4860>.output_sample_shape to 38
INFO:DecisionGD:Will allow max 20 epochs
100% |#################| 17 units were initialized
INFO:Launcher:Reactor is running
INFO:Main:Returned the control
INFO:FullBatchAutoLabelFileImageLoader:Last minibatch (362 total) of class VALIDATION served in epoch 0
INFO:DecisionGD:Epoch 0 class validation n_err 356 (98.34%) in 0.06 sec
INFO:GraphicsClient:Launching WebAgg instance on port 8083
INFO:GraphicsClient:Graphics client is running in process 11915
INFO:Launcher:Found out the WebAgg port: 8083
INFO:FullBatchAutoLabelFileImageLoader:Last minibatch (2052 total) of class TRAIN served in epoch 1
INFO:DecisionGD:Epoch 1 class train n_err 1859 (90.59%) in 0.56 sec
INFO:FullBatchAutoLabelFileImageLoader:Last minibatch (362 total) of class VALIDATION served in epoch 1
INFO:DecisionGD:Epoch 1 class validation n_err 307 (84.81%) in 0.05 sec
INFO:FullBatchAutoLabelFileImageLoader:Last minibatch (2052 total) of class TRAIN served in epoch 2
INFO:DecisionGD:Epoch 2 class train n_err 1536 (74.85%) in 0.42 sec
INFO:FullBatchAutoLabelFileImageLoader:Last minibatch (362 total) of class VALIDATION served in epoch 2
INFO:DecisionGD:Epoch 2 class validation n_err 264 (72.93%) in 0.05 sec
INFO:FullBatchAutoLabelFileImageLoader:Last minibatch (2052 total) of class TRAIN served in epoch 3
INFO:DecisionGD:Epoch 3 class train n_err 1235 (60.19%) in 0.42 sec
INFO:FullBatchAutoLabelFileImageLoader:Last minibatch (362 total) of class VALIDATION served in epoch 3
INFO:DecisionGD:Epoch 3 class validation n_err 198 (54.70%) in 0.05 sec
INFO:FullBatchAutoLabelFileImageLoader:Last minibatch (2052 total) of class TRAIN served in epoch 4
INFO:DecisionGD:Epoch 4 class train n_err 1009 (49.17%) in 0.42 sec
INFO:FullBatchAutoLabelFileImageLoader:Last minibatch (362 total) of class VALIDATION served in epoch 4
INFO:DecisionGD:Epoch 4 class validation n_err 183 (50.55%) in 0.05 sec
INFO:FullBatchAutoLabelFileImageLoader:Last minibatch (2052 total) of class TRAIN served in epoch 5
INFO:DecisionGD:Epoch 5 class train n_err 875 (42.64%) in 0.42 sec
INFO:FullBatchAutoLabelFileImageLoader:Last minibatch (362 total) of class VALIDATION served in epoch 5
INFO:DecisionGD:Epoch 5 class validation n_err 161 (44.48%) in 0.05 sec
INFO:FullBatchAutoLabelFileImageLoader:Last minibatch (2052 total) of class TRAIN served in epoch 6
INFO:DecisionGD:Epoch 6 class train n_err 755 (36.79%) in 0.42 sec
INFO:FullBatchAutoLabelFileImageLoader:Last minibatch (362 total) of class VALIDATION served in epoch 6
INFO:DecisionGD:Epoch 6 class validation n_err 148 (40.88%) in 0.05 sec
INFO:FullBatchAutoLabelFileImageLoader:Last minibatch (2052 total) of class TRAIN served in epoch 7
INFO:DecisionGD:Epoch 7 class train n_err 656 (31.97%) in 0.42 sec
INFO:FullBatchAutoLabelFileImageLoader:Last minibatch (362 total) of class VALIDATION served in epoch 7
INFO:DecisionGD:Epoch 7 class validation n_err 137 (37.85%) in 0.05 sec
INFO:FullBatchAutoLabelFileImageLoader:Last minibatch (2052 total) of class TRAIN served in epoch 8
INFO:DecisionGD:Epoch 8 class train n_err 561 (27.34%) in 0.42 sec
INFO:FullBatchAutoLabelFileImageLoader:Last minibatch (362 total) of class VALIDATION served in epoch 8
INFO:DecisionGD:Epoch 8 class validation n_err 121 (33.43%) in 0.06 sec
INFO:FullBatchAutoLabelFileImageLoader:Last minibatch (2052 total) of class TRAIN served in epoch 9
INFO:DecisionGD:Epoch 9 class train n_err 471 (22.95%) in 0.42 sec
INFO:FullBatchAutoLabelFileImageLoader:Last minibatch (362 total) of class VALIDATION served in epoch 9
INFO:DecisionGD:Epoch 9 class validation n_err 110 (30.39%) in 0.05 sec
INFO:NNSnapshotter:Snapshotting to /.../.veles/snapshots/yalefaces_30.39pt.4.pickle.gz...
INFO:NNSnapshotter:All2AllTanh: input: min max avg: -0.357297 0.791220 -0.002804
INFO:NNSnapshotter:All2AllTanh: weights: min max avg: -0.014116 0.013425 -0.000015
INFO:NNSnapshotter:All2AllTanh: bias: min max avg: -0.012791 0.011129 0.000084
INFO:NNSnapshotter:All2AllTanh: output: min max avg: -1.572862 1.424502 -0.006934
INFO:NNSnapshotter:All2AllSoftmax: weights: min max avg: -0.125616 0.112880 -0.000141
INFO:NNSnapshotter:All2AllSoftmax: bias: min max avg: -0.051301 0.050824 -0.000993
INFO:NNSnapshotter:All2AllSoftmax: output: min max avg: 0.002155 0.275100 0.026316
INFO:NNSnapshotter:EvaluatorSoftmax: err_output: min max avg: -0.448843 0.057346 -0.000000
INFO:NNSnapshotter:GDSoftmax: err_input: min max avg: -0.010567 0.010521 0.000012
INFO:FullBatchAutoLabelFileImageLoader:Last minibatch (2052 total) of class TRAIN served in epoch 10
INFO:DecisionGD:Epoch 10 class train n_err 412 (20.08%) in 3.52 sec
INFO:FullBatchAutoLabelFileImageLoader:Last minibatch (362 total) of class VALIDATION served in epoch 10
INFO:DecisionGD:Epoch 10 class validation n_err 93 (25.69%) in 0.05 sec
INFO:FullBatchAutoLabelFileImageLoader:Last minibatch (2052 total) of class TRAIN served in epoch 11
INFO:DecisionGD:Epoch 11 class train n_err 343 (16.72%) in 0.42 sec
INFO:FullBatchAutoLabelFileImageLoader:Last minibatch (362 total) of class VALIDATION served in epoch 11
INFO:DecisionGD:Epoch 11 class validation n_err 85 (23.48%) in 0.05 sec
INFO:FullBatchAutoLabelFileImageLoader:Last minibatch (2052 total) of class TRAIN served in epoch 12
INFO:DecisionGD:Epoch 12 class train n_err 311 (15.16%) in 0.42 sec
INFO:FullBatchAutoLabelFileImageLoader:Last minibatch (362 total) of class VALIDATION served in epoch 12
INFO:DecisionGD:Epoch 12 class validation n_err 80 (22.10%) in 0.05 sec
INFO:FullBatchAutoLabelFileImageLoader:Last minibatch (2052 total) of class TRAIN served in epoch 13
INFO:DecisionGD:Epoch 13 class train n_err 285 (13.89%) in 0.42 sec
INFO:FullBatchAutoLabelFileImageLoader:Last minibatch (362 total) of class VALIDATION served in epoch 13
INFO:DecisionGD:Epoch 13 class validation n_err 64 (17.68%) in 0.06 sec
INFO:FullBatchAutoLabelFileImageLoader:Last minibatch (2052 total) of class TRAIN served in epoch 14
INFO:DecisionGD:Epoch 14 class train n_err 248 (12.09%) in 0.42 sec
INFO:FullBatchAutoLabelFileImageLoader:Last minibatch (362 total) of class VALIDATION served in epoch 14
INFO:DecisionGD:Epoch 14 class validation n_err 58 (16.02%) in 0.05 sec
INFO:FullBatchAutoLabelFileImageLoader:Last minibatch (2052 total) of class TRAIN served in epoch 15
INFO:DecisionGD:Epoch 15 class train n_err 236 (11.50%) in 0.42 sec
INFO:FullBatchAutoLabelFileImageLoader:Last minibatch (362 total) of class VALIDATION served in epoch 15
INFO:DecisionGD:Epoch 15 class validation n_err 58 (16.02%) in 0.06 sec
INFO:FullBatchAutoLabelFileImageLoader:Last minibatch (2052 total) of class TRAIN served in epoch 16
INFO:DecisionGD:Epoch 16 class train n_err 207 (10.09%) in 0.42 sec
INFO:FullBatchAutoLabelFileImageLoader:Last minibatch (362 total) of class VALIDATION served in epoch 16
INFO:DecisionGD:Epoch 16 class validation n_err 52 (14.36%) in 0.05 sec
INFO:FullBatchAutoLabelFileImageLoader:Last minibatch (2052 total) of class TRAIN served in epoch 17
INFO:DecisionGD:Epoch 17 class train n_err 185 (9.02%) in 0.42 sec
INFO:FullBatchAutoLabelFileImageLoader:Last minibatch (362 total) of class VALIDATION served in epoch 17
INFO:DecisionGD:Epoch 17 class validation n_err 44 (12.15%) in 0.06 sec
INFO:FullBatchAutoLabelFileImageLoader:Last minibatch (2052 total) of class TRAIN served in epoch 18
INFO:DecisionGD:Epoch 18 class train n_err 171 (8.33%) in 0.42 sec
INFO:FullBatchAutoLabelFileImageLoader:Last minibatch (362 total) of class VALIDATION served in epoch 18
INFO:DecisionGD:Epoch 18 class validation n_err 44 (12.15%) in 0.05 sec
INFO:FullBatchAutoLabelFileImageLoader:Last minibatch (2052 total) of class TRAIN served in epoch 19
INFO:DecisionGD:Epoch 19 class train n_err 157 (7.65%) in 0.42 sec
INFO:FullBatchAutoLabelFileImageLoader:Last minibatch (362 total) of class VALIDATION served in epoch 19
INFO:DecisionGD:Epoch 19 class validation n_err 45 (12.43%) in 0.06 sec
INFO:FullBatchAutoLabelFileImageLoader:Last minibatch (2052 total) of class TRAIN served in epoch 20
INFO:DecisionGD:Epoch 20 class train n_err 145 (7.07%) in 0.42 sec
INFO:FullBatchAutoLabelFileImageLoader:Last minibatch (362 total) of class VALIDATION served in epoch 20
INFO:DecisionGD:Epoch 20 class validation n_err 43 (11.88%) in 0.05 sec
INFO:NNSnapshotter:Snapshotting to /.../.veles/snapshots/yalefaces_11.88pt.4.pickle.gz...
INFO:NNSnapshotter:All2AllTanh: input: min max avg: -0.357297 0.791220 -0.002804
INFO:NNSnapshotter:All2AllTanh: weights: min max avg: -0.019245 0.018747 -0.000029
INFO:NNSnapshotter:All2AllTanh: bias: min max avg: -0.029353 0.022790 0.000203
INFO:NNSnapshotter:All2AllTanh: output: min max avg: -1.660748 1.612951 -0.009259
INFO:NNSnapshotter:All2AllSoftmax: weights: min max avg: -0.168302 0.167950 -0.000141
INFO:NNSnapshotter:All2AllSoftmax: bias: min max avg: -0.062234 0.065644 -0.000993
INFO:NNSnapshotter:All2AllSoftmax: output: min max avg: 0.000094 0.839616 0.026316
INFO:NNSnapshotter:EvaluatorSoftmax: err_output: min max avg: -0.375672 0.105692 -0.000000
INFO:NNSnapshotter:GDSoftmax: err_input: min max avg: -0.011464 0.012940 -0.000041
INFO:YaleFacesWorkflow:Finished
INFO:Launcher:Stopping everything (standalone mode)
INFO:YaleFacesWorkflow:Unit run time statistics top:
+---+----+----------------+----------------+
| # | %  |      time      | unit           |
+---+----+----------------+----------------+
| 1 | 38 | 0:00:05.682100 | NNSnapshotter  |
| 2 | 30 | 0:00:04.461317 | DecisionGD     |
| 3 | 13 | 0:00:01.997349 | GDTanh         |
| 4 | 6  | 0:00:00.885001 | GDSoftmax      |
| 5 | 3  | 0:00:00.540686 | All2AllSoftmax |
| Σ | 92 | 0:00:13.566452 | Top 5          |
+---+----+----------------+----------------+
INFO:YaleFacesWorkflow:Total run time:
+----------------+----------------+-----+
|     units      |      real      | η,% |
+----------------+----------------+-----+
| 0:00:14.608761 | 0:00:15.452039 |  94 |
+----------------+----------------+-----+
INFO:Launcher:Time elapsed: 0:00:15.457077

In [4]:
from veles.znicz.labels_printer import LabelsPrinter
In [5]:
fwd = launcher.workflow.extract_forward_workflow(
loader_name="interactive_image", loader_config={},
result_unit_factory=LabelsPrinter, cyclic=True)
In [6]:
launcher.boot()
INFO:OpenCLDevice:Selected the following OpenCL configuration:
+-------------------------------------------+--------+--------+------------+---------+
| device                                    |  dtype | rating | BLOCK_SIZE | version |
+-------------------------------------------+--------+--------+------------+---------+
| NVIDIA Corporation/GeForce GTX TITAN/4318 | double | 1.000  |     27     |   1.1   |
| NVIDIA Corporation/GeForce GTX TITAN/4318 | float  | 1.000  |     30     |   1.1   |
+-------------------------------------------+--------+--------+------------+---------+
INFO:StandardWorkflowBase:Initializing units in Forwards@FullyConnected_YaleFaces...
INFO:InteractiveImageLoader:Minibatch size is set to 1
INFO:InteractiveImageLoader:Samples number: test: 1, validation: 0, train: 0
INFO:InteractiveImageLoader:Performing "mean_disp" normalization analysis...
100% |                                 |
INFO:StandardWorkflowBase:Setting <veles.znicz.all2all.All2AllSoftmax object at 0x7f985c267c50>.output_sample_shape to 38
100% |#######| 7 units were initialized
INFO:Launcher:Reactor is running
INFO:InteractiveImageLoader:Waiting for the user's input...

In [7]:
feed("http://cont.ws/uploads/posts/78168.jpg")

INFO:InteractiveImageLoader:Served 1 samples (1 epochs, 0.0% current); jobs failed: 0/pending: 1
INFO:InteractiveImageLoader:Last minibatch (1 total) of class TEST served in epoch 1
INFO:LabelsPrinter:Results:
+-------+---------+
| label |  value  |
+-------+---------+
|   17  | 0.03079 |
|   11  | 0.02980 |
|   23  | 0.02951 |
|   5   | 0.02915 |
|   30  | 0.02850 |
+-------+---------+
INFO:LabelsPrinter:Max to mean ratio: 1.2
INFO:InteractiveImageLoader:Waiting for the user's input...

Publish the results.

Receive automatic reports when the training ends. The supported formats include Atlassian Confluence; PDF, Latex and HTML backends are not yet implemented - but soon will be.

Tens of plotting units provide comprehensive insight into the training process.

You've got only

:
:

till the end of day to

Download ...and then the next day will come.

Create your own image datasets, fast.

Veles includes "bboxer", a collaborative tool for image dataset markup.

Veles loaders provide automatic dataset analysis.
Solve your task without having to write how to load the data.
Requires no data preprocessingINFO:MnistLoader:Loading from original MNIST files...
INFO:MnistLoader:Minibatch size is set to 88
See the number of samples in each setINFO:MnistLoader:Samples number: test: 0, validation: 10000, train: 60000
DEBUG:MnistLoader:Shuffling, remaining limit is 4294967294
DEBUG:MnistLoader:Shuffled train set
Various data normalization algorithmsINFO:MnistLoader:Normalizing to linear...
DEBUG:MnistLoader:Data range: (0.000000, 255.000000), 
DEBUG:MnistLoader:Normalized data range: (-1.000000, 1.000000), 
The number of classes in the raw dataINFO:MnistLoader:There are 10 unique labels
INFO:MnistLoader:train label cardinalities: min: 5421 ("5"), max: 6742 ("1"), avg: 6000, σ: 322 (5%)
DEBUG:MnistLoader:Detailed train label stats:
+-------+-------------+------+---------------------------+
| Label | Cardinality |    % | Histogram                 |
+-------+-------------+------+---------------------------+
|   0   |        5923 |  9.9 | *********************     |
|   1   |        6742 | 11.2 | ************************* |
|   2   |        5958 |  9.9 | **********************    |
|   3   |        6131 | 10.2 | **********************    |
|   4   |        5842 |  9.7 | *********************     |
|   5   |        5421 |  9.0 | ********************      |
|   6   |        5918 |  9.9 | *********************     |
|   7   |        6265 | 10.4 | ***********************   |
|   8   |        5851 |  9.8 | *********************     |
|   9   |        5949 |  9.9 | **********************    |
+-------+-------------+------+---------------------------+
Calculates the cardinality standard deviation to reflect the balanceINFO:MnistLoader:validation label cardinalities: min: 892 ("5"), max: 1135 ("1"), avg: 1000, σ: 59 (5%)
DEBUG:MnistLoader:Detailed validation label stats:
+-------+-------------+------+---------------------------+
| Label | Cardinality |    % | Histogram                 |
+-------+-------------+------+---------------------------+
|   0   |         980 |  9.8 | *********************     |
|   1   |        1135 | 11.3 | ************************* |
|   2   |        1032 | 10.3 | **********************    |
|   3   |        1010 | 10.1 | **********************    |
|   4   |         982 |  9.8 | *********************     |
|   5   |         892 |  8.9 | *******************       |
|   6   |         958 |  9.6 | *********************     |
|   7   |        1028 | 10.3 | **********************    |
|   8   |         974 |  9.7 | *********************     |
|   9   |        1009 | 10.1 | **********************    |
+-------+-------------+------+---------------------------+
Does a simple test on mutual set balanceINFO:MnistLoader:OK: train and validation labels have the same distributions (Χ-square test's p-value is 1.000)
INFO:MnistLoader:Will try to store the entire dataset on the device
DEBUG:MnistLoader:Used the cached fullbatch_loader for engine "ocl"

Veles and Hadoop are friends.

Veles is bundled with Mastodon, a subproject which integrates it with any Java application. Mastodon includes a simple load balancer between Java nodes and Veles slaves.

Extract features in Hadoop and classify objects in Veles. Analyze data in Veles and pass the results next through the pipeline.

Machine learning model execution goes in a workflow, which consists of units and child workflows. Units represent logically independent and integral algorithm parts. E.g. single network layer is a unit; the gradient descent step is another unit.

Veles uses a typical data driven approach, where control flow is ruled by data processing through control flow links between units.

Such architecture allows easily manageable data parallel and model parallel execution of models.

Packed with features.

Veles is cluster and Docker friendly. Deploy the exported tarball, initialize the pyenv environment and you are ready to go - with just 2 simple commands.

REST API allows to use the trained model in a production environment at once.

Manhole feature allows to execute an interactive IPython session in the running process context at any time.

Live reload feature allows changing the Python code without restarting the process.

And many, many more...

Lines of Code

Java

SASS

HTML

OpenCL/CUDA

Javascript

C/C++

Python (tests)

Python (platform)

Veles platform is built on top of many open source projects.
Dependencies

If I have seen further it is by standing on the shoulders of giants.

Contributions are welcome.

Send pull requests on GitHub, they will be automatically converted into Gerrit patchsets. Watch how nightly tests run in Jenkins.

There is plenty of work to do: port to Windows and Mac OS X, add CuDNN support, extend reporting options, improve the distributed operation and many, many more.