Skip to content

Instantly share code, notes, and snippets.

@tamuratak
Last active April 7, 2017 05:18
Show Gist options
  • Save tamuratak/571786303a78c2838c4895b7c09c954a to your computer and use it in GitHub Desktop.
Save tamuratak/571786303a78c2838c4895b7c09c954a to your computer and use it in GitHub Desktop.
SWIGを使って Microsoft Cognitive Toolkit (CNTK) のRuby用バインディングを作成しました

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++で実装されているので、 バインディング作成が容易そうなディープラーニングのオープンソース実装は他にもありまして、

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

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

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment