Python製深層学習ライブラリ「Keras」の紹介 (with TensorFlow)
皆様こんにちは,@a_macbeeです.
(大分時間ギリギリになってしまいましたが)この記事はAdvent Calendar 2015 - VOYAGE GROUP 2日目の担当分になります.
2015年は良くも悪くも深層学習がバズワードとなって盛り上がった年でした. 面白い論文が続々発表されたり,関連書籍が次々出版されたり,最近だとGoogleが発表した深層学習ツールTensorFlowが話題となってます.
このビッグウェーブに乗るしかないということで,この記事では自他共に認めるPython大好きな私がPython製の深層学習ライブラリである「Keras」について紹介します.
Keras
KerasはPython製の深層学習ライブラリです.
もともとはバックエンドとしてTheanoを採用していたのですが,つい最近TensorFlowも選択できるようになりました.ここでは,折角なのでTensorflowをバックエンドとして利用する方にフォーカスして紹介します.
個人的には,シンプルで拡張性の高いところと,開発が盛んでPython3.5でも使える点などが気に入っています(日本だとあまり聞きませんが,海外だと結構人気な印象(あくまで印象))
※バックエンドとしてTensorFlowを利用する場合はPython2.7縛りが発生します
インストール
pip
を使って簡単にインストールすることが出来ます.
$ pip install keras
ベースにTensorFlowを利用する場合は,別途TensorFlowも導入しておきましょう(以下はMac環境に導入する例)
$ pip install https://storage.googleapis.com/tensorflow/mac/tensorflow-0.5.0-py2-none-any.whl
KerasのバックエンドをTensorFlowに変更する
KerasはデフォルトでTheanoを利用する仕様になっているので,TensorFlowを利用したい場合は設定を書き換える必要があります.
バックエンドの変更は非常に簡単で,~/.keras/keras.json
というファイルを作成して以下の内容を書き込むだけです.
{"backend": "tensorflow"}
もちろん,TeanoとTensorFlow両方に対して互換性のある形でコードを記述することが可能です.
個人的にはそこが一番特徴的でKerasの面白い点だと思ってます.
詳細は公式ページをご覧ください:Keras backends
Getting Started
Keras以外の深層学習ライブラリを利用したことのある方であれば,「Getting started: 30 seconds to Keras」をさらえばざっくりとした使い方は分かるかなと思います.
MNIST
ド定番のMNISTを使って,簡単に使い方を説明します.
コードの全容はこちら:MNIST - Keras (Backend: TensorFlow)
Kerasでは,定義したモデルにレイヤを追加していくことでネットワークを定義します.シンプル.
model = Sequential() model.add(Dense(10, input_shape=(784,), init='zero')) model.add(Activation("softmax")) # こう書くことも出来ます # model.add(Dense(10, input_shape=(784,), init='zero', activation='softmax'))
モデルのコンパイルや訓練,評価などは以下のように書けます.
サポートしている loss
や optimizer
の種類については公式ページをご覧下さい.
# モデルをコンパイルして訓練 model.compile(loss='categorical_crossentropy', optimizer=Adam(lr=0.01)) model.fit(X_train, y_train, nb_epoch=10, batch_size=100) # テストデータを使ってモデルを評価 model.evaluate(X_test, y_test, show_accuracy=True)
このコードは,もちろんバックエンドをTeanoに変更しても動きます.
IMDB Movie reviews
もう一つ,映画レビューの感情分類の例を紹介します.
コードの全容はこちら:
IMDB Movie reviews sentiment classification - Keras (Backend: TensorFlow)
ここではLSTMを利用しています.
他ツールと同様,シーケンス長の調整や,Embeddingなどの操作も非常に簡単に書くことができます.
# シーケンス長をmaxlenに調整 X_train = sequence.pad_sequences(X_train, maxlen=maxlen) X_test = sequence.pad_sequences(X_test, maxlen=maxlen) model = Sequential() model.add(Embedding(max_features, 128, input_length=maxlen)) model.add(LSTM(128)) model.add(Dropout(0.5)) model.add(Dense(1)) model.add(Activation('sigmoid'))
Kerasはバックエンドに依存してCPU/GPU環境が分かれます. Kerasで定義されるメソッドを利用する上ではそこを意識する必要はありません(ちなみに上記のコードはCPU環境で動かしてます)
最後に
本当は「A Neural Conversational Model」をやっていたのですが諸々の事情で間に合わなかったので,この辺りでお茶を濁しておきます.気力があればまとめるかもしれません.
KerasはTensorFlow使ってみたいけど文法覚えるのだるいといった私のような人間にはおすすめのライブラリなんじゃないでしょうか.