haackmanchainer・pythonお久しぶりです。最近Webプログラミング以外にPythonも扱い始めたので今回はその話題です。何かと話題になっている深層学習(ディープラーニング)ですが、プログラミングで深層学習をするためのフレームワークというのも存在します。使われるのは、PythonのChainerというものと、TensorFlowの2種類です。私は最近PythonのChainerを使い始めましたので、Chainerを使ったディープニューラルネットの書き方を少し解説していきたいと思います。Chainerの導入Chainerを使うには環境を設定しなければいけませんが、これが一番厄介かもしれません。Pythonをまずは入れるところからなのですが、macなんかを使っている人はデフォルトでPythonが導入されていることがあると思います。できればデフォルトのものより、新しく環境を整える意味でも違うバージョンを入れ直した方がいいかもしれません。私の場合は2.7.3を導入しました。Chainerの導入方法については他サイトでも紹介されていますのでそちらを参考にしてみてください。下記サイトなど参考になるかと思います。http://qiita.com/shinji1105/items/3c54feb6dd5e7ea63a62サンプルプログラムを見てみる。今回はChainerに用意されているサンプルプログラムを使ってニューラルネットの構築方法を見ていこうと思います。わかりやすいのはmnist.pyですね。これエムニストって読むらしいです・・・余談moist.pyは何をしているプログラムかというと、0から9までの手書き数字が書かれた画像をニューラルネットを使って学習し判別しています。画像はプログラム中でダウンロードしてきているようです。以下にプログラムと、個人的に説明文を挿入したものを示します。main()すべて説明するとかなり長くなるので、ディープネットの構築部分だけ解説します。各ニューラルネットの層を定義している部分からです。プログラム中のMLPと名付けられたクラス内の_init_で定義されています。Lによって使えるようになっています。LinksのLinearクラスを参照していて、これは全結合層を表します。他にも、畳み込み層なら、Convolution2Dなど、層によって適したクラスが用意されているようです。mnist.pyの場合は全結合層3層で構成されているニューラルネットということがわかります。Linearの引数は2つで、一つ目が入力の数、2つ目が出力の数となっています。Noneとすると入力は自動で入ってきた入力数分を判断するのではないでしょうか。n_unitsとn_outは_init_が呼び出される時に引数として入ってくるので、自由に変更可能ですね。次に_call_を見ていきます。こちらもMLP内にありますね。self.l3(h2)先ほどは層を定義しただけでしたが、ここでは各層の活性化関数を適宜しています。Fにより使用できるようになっています。Functionsクラス内のreluという関数を呼び出していて、これはChainerでは最もよく使われる活性化関数のようです。他にも幾つか種類があるようです。今回は1層と2層の活性化関数をreluにしてあることがわかりますね。実はニューラルネットの定義はこれで終わりです。細かい誤差関数の設定なんかはまた別であるのですが、ひとまず層とその結びつきに関しては、層を定義して活性化関数でつなぐだけなんですね。まとめそれにしてもChainerのサンプルプログラムめっちゃ短い!と思ったのに別の関数に飛びまくってて、1つのファイルに全部書くとめちゃくちゃ長いんじゃないかこれ。読み解くのにも一苦労です。フレームワークになっているんでしょうけどね。コメントをキャンセルメールアドレスが公開されることはありません。Themeisle.。