# Why Chainer?

I will list up good points of Chainer as an opinion from one Chainer enthusiast.

## Features

### Easy environment setup

Environment setup is easy, execute one command pip install chainer that’s all and easy.

Some deep learning framework is written in C/C++ and requires to build by your own. It will take hours to only setup your develop environment.

### Easy to debug

Chainer is fully written in python, and you can see the stack trace log when error raised. You can print out log during the neural network calculation, which cannot be done with many other framework where the neural network model needs to be pre-compiled (static graph framework).

### Flexible

Chainer is  flexible and due to its base concept, “define by run” scheme. Complicated network can be defined, for example, network can contain if-else condition clause etc.

Complex neural networks made easy by Chainer
A define-by-run approach allows for flexibility and simplicity when building deep learning

### Extensible, Customizable

It is also easy to develop your own function, your own neural network layer only using python with Chainer.

In some other framework, however, you need to hack framework itself to modify/implement your custom function (maybe in C/C++). For example, caffe, we can find some forks that is modifying caffe itself to implement additional functionality.

These are hard to understand to separate the original code and custom function, and hard to maintain the code.

### Good for study

Since chainer is written in python, you can jump to the function definition and read python docstring if you want to dig in the internal behavior.

You only need to be familiar with python. Deep knowledge about C/C++ is not necessary. I think it is more mass appealing.

## Performance, speed

I wrote that Chainer is implemented in python and flexible. Now you may wonder Chainer is slow as a side effect of its flexibility, compared to the framework which is written in C/C++.

This is true that there’s a computational overhead, but actually it is not so big.
When we check soumith/convnet-benchmarks, which summaries the performance comparison among famous deep learning frameworks, you can notice that Chainer performance is comparable with other frameworks.

Then, I think the advantage for its flexibility that contributes to reduce real-time development time overcomes its computational time overhead.

### GPU support, cupy

Chainer’s team is also developing cupy, to support array variable with GPU enhancement.

If machines with NVIDIA GPU is used, you can get benefit of parallel computation with GPU. This is kind of “MUST” to do if you run deep learning with big data recently.

### Multi Node support, ChainerMN

Recent update reports that Chainer will support multi node GPU environment, and its scalability was quite well. When 128 GPUs are used, ChainerMN speed outperformed other existing framework.

## Actual usage

### Research use

As I wrote above, Chainer is suitable for research & development for deep learning. And the number of paper which adapts Chainer as their research framework is growing recently. The lists that use chainer in research is in following link

Chainer is developed by Japanese company, Preferred Networks. The company’s business category includes

• Car          – Working with Toyota motors for Auto-driving R&D.
• Industry – Working with FANUC for industrial automation.
• Bio           – Established PFN cancer research institute
• Web Application – Working with DeNA, create joint venture company PFDeNA
etc.

covering wide range of business category.

### Application use/hobby use

There are also several application using Chainer.

PaintsChainer, auto-colorization tool  got attention recently. Given line drawing image on the left, it will return colorized image.

Chainer can be used in personal project/hobby as well. There are many open source examples that you can refer

## Future support

There are several exciting news for Chainer’s future development.

### Development is active

There are 101 Pull requests on Chainer repository at the time of writing (2017 Feb 23), development is lead by company and is quite active. When some paper introduces new idea, its layer, functions may be implemented in official Chainer.

### ChainerMN

Multi Node support for Chainer, ChainerMN, seems to be introduced in the near future.

### Chainer playground

Chainer playground provides interactive, browser based, deep learning study tool with Chainer.

Currently it is beta version and only for Japanese.

### ChainerRL

Deep learning technology is spreading very rapidly, but still there are not so many players who can integrate Reinforcement Learning technology into deep learning → Deep Reinforcement Learning. It becomes famous by Deepmind’s Atari demo & Alpha Go.

ChainerRL is published very recently, and it will be the very helpful introduction for those who want to learn the current hot category of Deep Reinforcement Learning.

## Other references

Other nice links for Chainer introduction

※ This is unofficial tutorial, the content of this blog is written based on personal opinion/understanding and is not reflect the view of Preferred Networks.