MATHGRAMスマートフォン用の表示で見るMATHGRAM主に数学とプログラミング、時々趣味について。pythonこんにちは。本記事は、kerasの簡単な紹介とmnistのソースコードを軽く紹介するという記事でございます。Learning界隈ではライブラリが豊富ということでpythonが主に使われています。flow、chainerなど・・・。僕の予想ではこれらが日本での三強になっているかと。僕の場合はレイヤーのつながりが読みやすく、何がどうなっているのかすぐにわかるchainerが大好きです。日本で開発されたこともあり、分からないことがあると大体日本語でのレファレンスがあるので、そこも好きなポイントです。そんなこんなで今までニューラルネットを使った学習はほとんどchainerを使ってきました。先日ふとしたきっかけでkerasを使ってみたところ・・・あれ...?chainerよりkerasの方が書きやすくね?と魔が差してしまいました。いうことで今回は、chainerからkerasに浮気してしまった僕の言い訳(kerasの魅力)を書いていこうかと思います。概要を説明して、その後に恒例のMNISTを見ながらどのように層が構成されるか見ていきましょう!それでは早速。learning用のフレームワークです。粒度としてはcaffeやchainerと同等のものとなりますね。kerasはラッパーだから、caffeとchainerとは少し違うかも。)読み方はわかりません。笑インドネシア語でkerasは"強い"や"硬い"を意味するそうですが・・・。ここが由来になってるのかなぁ?誰か知っている人いたら教えてください。インドネシア語の発音をカタカナにしてみると"クーラス"と聞こえるので、日本語で発音するときはクーラスにしておこうかなと。こんなんどうでもいいですね。開発者はgoogleの方で、ここでもgoogleの凄さを感じますね。hubとdocumentは以下です。Documentationそれでは中身の紹介に移りましょう。使い勝手の良ささて、kerasの魅力について語っていきましょう。言っても、まだほとんど触っていないので本当のところまだまだ魅力をわかりきっていません。笑じゃあなんでkerasに惹かれたのかという話ですが、全てはネットワークの書き方にあります。chainerをネットワークのわかりやすさから選択していた僕にとってここの部分は結構大きいわけです。あとchainerのようにpipだけで入れられるのはかなりいいところだと思います。python3.x系にもちゃんと対応していて、GPUモードをMacで動かすのも結構簡単です。CapitanだとchainerのGPUモードを動かすのが現状難しいようなので、Macユーザにとっても嬉しい部分だと思います。Mac上でGPUモードの環境を構築する方法はすぐに記事でまとめます。GPUモードに関する記事書きました!)それではmnistのソースコードを見ながらどのようにネットワークを組むのかを見ていきましょう。今回はMNISTまでに止まりますが、kerasのソースコードはゴリゴリ読んでいくつもりなので、便利な機能や紹介したいものがありましたら随時書いていきますね。一応、僕の環境は以下です。(pyenv)まずはpipで簡単にインストールして、gitからコードをダウンロードしましょう。keras以上でインストールは終了です。ここで、theanoとkerasがインストールされます。ubuntuにインストールした時、theanoがうまく入らずkerasが動かないことがあったので、動かなかったら一度theanoをuninstallしてからkerasを入れてみてください。kerasこんな感じでやれば動くはずです。それでは、とりあえずmnistを動かしましょう。cloneでコピってきます。https://github.com/fchollet/keras.gitサンプルコードは~/keras/examples/にあります。mnistをCNNで学習させているmnist_cnn.pyというファイルがありますのでこいつを動かしてみましょう。~/keras/examples/mnist_cnn.py学習が開始するとこんな感じにプログレスバーが出てきます。lossが下がっていくのを見ているだけで1日終わりそうです。したことですが、こういうのがデフォルトでついてるのは嬉しいですね。動作が確認できたのでmnist_cnn.pyの中身を見ていきましょう。説明したい部分だけ説明するので、全スクリプトを見たい場合は直接みてくださいね!まずはimportの部分。np_utilschainerよりスッキリしてる感じがありますね。(贔屓目)まあ、とりあえずnumpyをimportしているのはいいとして、その次はなんでしょう?reproducibilityとは再現性という意味。np.random.seed(int)でランダムで生成される数字を処理ごとに固定することができます。数字はなんでもいいらしいので、1337なのは今のところ謎。この固定した乱数で、データセットのシャッフルを行っている感じでしょうか。その下はkerasからのimport。上から順に、データ取得用。ネットワーク作成の基盤となるSequentialのインポート全結合やドロップアウトなどのネットワークに必要なcoreとなるモジュールのインポートNNで使うモデルをインポート教師データの整形用って感じになっています。した説明で申し訳ないですが、詳しい内容はDocumentを見てください、お願いします。ネットワーク定義の部分ですね。metrics=['accuracy'])以上がネットワークの定義している部分、全てです。なんてわかりやすいんだ・・・。metrics=['accuracy'])のようにロス関数と最適化手法を定義しつつコンパイルしてあげることで、もうモデルは出来上がり。ロス関数や最適化手法は、有名なものであればほとんど揃っています。ことがない限り、ここで困ることはないでしょう。NNが組めたら、あとは学習を始めるだけ。verbose=0)fitの引数にデータを渡して、epochやバッチサイズを定義すれば学習開始です。ちなみに先ほど紹介したプログレスバーの選択がverboseという引数で設定できます。眺めたいのでtrain時は基本1でいきましょう!笑モデルの評価はevaluate。lossとaccをリストで返してくれます。ここではverboseはいらないので0になってますね。ほとんど詳しい説明はしていませんが、読んでくれた人がkerasに興味を持ってくれれば満足です。これ以降、基本的にkerasで書いていこうと考えているので、そっちの記事でもっと詳しい部分が書けたらいいなと思っております。まとめかなり駆け足でしたが、kerasの紹介はここまでです。使いこなせていないのにも関わらず、とりあえず記事にしちゃった感じなので、これから色々紹介できたらいいなー。モデルの可視化をしよう!!どうも、こんにちは。»Profile表参道で働く、フロントエンドエンジニア普段はTypeScriptでReact&Redux書いてます。機械学習最近全くやってないけど、復活しようと企んでる。(2)Archiveはてなブログをはじめよう!ket-30さんは、はてなブログを使っています。ブログを報告するスターをつけました引用をストックしましたストック一覧を見る閉じる引用するにはまずログインしてくださいログイン閉じる引用をストックできませんでした。再度お試しください閉じる限定公開記事のため引用できません。