こんにちは田村です。

SWIG を利用して Microsoft Cognitive Toolkit (CNTK) の Ruby 用バインディングを作りましたので、紹介します。

CNTK は C++ で実装されたディープラーニングのオープンソース実装でして、昨年 Python 用バインディングが追加されました。
このバインディングは SWIG を使って実装されています。C#, R 用のバインディングも作成することが予定されていて、
そのため採用されたのだと思います。なのでSWIGを使えばRuby用のバインディングも作成できるわけでして、作成しました。

Tensorflow に関しても同様の試みがなされていますが、CNTK の場合ほとんど全て C++ で実装されているので、
SWIGを使えばバインディングを作るのが非常に容易だという特徴が挙げられます。

https://github.com/tamuratak/ruby-cntk

現在のところ CPU上で MNIST の学習ができるところまで動作確認が済んでいます。

https://github.com/tamuratak/ruby-cntk/tree/master/examples/05mnist_feedforward

モデルは以下のように記述できます。

f = dense([400]) >> relu() >> dense([400]) >> relu() >> dense([10])

インストールは Docker を使うのが確実です。イメージも公開しておきました。

https://hub.docker.com/r/tamuratak/ruby-cntk/

ここからが本題ですが、SWIGを使ってバインディングを作っていて且つC++で実装されているので
バインディング作成が容易そうなディープラーニングのオープンソース実装は他にもありまして、

* Baidu の PaddlePaddle https://github.com/PaddlePaddle/Paddle
* Carnegie Mellon University の DyNet https://github.com/clab/dynet

興味ある学生さんがいましたら、これらのRuby用バインディングのSWIGでの作成で GSoC  @ SciRuby などに申し込んで
みるなどというのはどうでしょうか。私自身は SciRuby とは全く関係ありませんが。

特に DyNet は Chainer や PyTorch のように動的にネットワークを生成していて、 Tensorflow などとはちょっとちがった
フレームワークになっています。一度触ってみるのも良いのではないかと思います。

追加で何か書くかもしれない gist

https://gist.github.com/tamuratak/571786303a78c2838c4895b7c09c954a

それでは。