Comparison with Other Frameworks
A table for quick comparison
This table compares Chainer with other popular deep learning frameworks. We hope it helps you to choose an appropriate framework for the demand.
This chart may be out-dated, since the developers of Chainer do not perfectly follow the latest development status of each framework. Please report us if you find an out-dated cell. Requests for new comparison axes are also welcome.
Chainer
Theano-based
Torch7
Caffe
Specs
Scripting
-----------------------------+
Net definition language
-----------------------------+
Define-by-Run scheme
-----------------------------+
CPU Array backend
-----------------------------+
GPU Array backend
Python
-------------------+
Python
-------------------+
Y
-------------------+
NumPy
-------------------+
PyCUDA1
Python
------------------------+
Python
------------------------+
------------------------+
NumPy
------------------------+
CudaNdarray2
LuaJIT
-------------------+
LuaJIT
-------------------+
-------------------+
Tensor
-------------------+
CudaTensor
Python
----------------------------------------------------+
Protocol Buffers
----------------------------------------------------+
----------------------------------------------------+
----------------------------------------------------+
NNs
Reverse-mode AD
-----------------------------+
Basic RNN support
-----------------------------+
Variable-length loops
-----------------------------+
Stateful RNNs3
-----------------------------+
Per-batch architectures
Y
-------------------+
Y
-------------------+
Y
-------------------+
Y
-------------------+
Y
Y
------------------------+
Y
------------------------+
Y (scan)
------------------------+
------------------------+
Y
-------------------+
Y (nnx)
-------------------+
-------------------+
Y4
-------------------+
Y
----------------------------------------------------+
#2033
----------------------------------------------------+
----------------------------------------------------+
----------------------------------------------------+
Perf
CUDA support
-----------------------------+
cuDNN support
-----------------------------+
FFT-based convolution
-----------------------------+
CPU/GPU generic coding5
-----------------------------+
Multi GPU (data parallel)
-----------------------------+
Multi GPU (model parallel)
Y
-------------------+
Y
-------------------+
-------------------+
6
-------------------+
Y
-------------------+
Y
Y
------------------------+
Y
------------------------+
Y
------------------------+
7
------------------------+
------------------------+
Y
-------------------+
Y (cudnn.torch)
-------------------+
Y (fbcunn)
-------------------+
Y
-------------------+
Y (fbcunn)
-------------------+
Y (fbcunn)
Y
----------------------------------------------------+
Y
----------------------------------------------------+
#544
----------------------------------------------------+
----------------------------------------------------+
Y
----------------------------------------------------+
Misc
Type checking
-----------------------------+
Model serialization
-----------------------------+
Caffe reference model
Y
-------------------+
Y (pickle)
-------------------+
Y
Y
------------------------+
Y (pickle)
------------------------+
8
Y
-------------------+
Y
-------------------+
Y (loadcaffe)
N/A
----------------------------------------------------+
Y
----------------------------------------------------+
Y
We are preparing for the benchmarks.
We are preparing for changing the GPU array backend to CuPy . It enables us to write one code for both CPU and GPU arrays.↩
They are also developing libgpuarray ↩
Stateful RNN is a type of RNN implementation that maintains states in the loops. It should enable us to use the states arbitrarily to update them.↩
Also available in the Torch RNN package <https://github.com/Element-Research/rnn > ↩
This row shows whether each array API supports unified codes for CPU and GPU.↩
We are preparing for changing the GPU array backend to CuPy . It enables us to write one code for both CPU and GPU arrays.↩
The array backend of Theano does not have compatible interface with NumPy, though most users write code on theano variables, which is generic for CPU and GPU.↩
Depending on the frameworks.↩