(翻訳)Keras: Theano と TensorFlow のための深層学習ライブラリ
翻訳 : (株)クラスキャット セールスインフォメーション
日時 : 02/11/2016
* 本ページは、Keras の本家サイト http://keras.io/ のトップページを翻訳したものです。
原題は: Keras: Deep Learning library for Theano and TensorFlow
* ご自由にリンクを張って頂いてかまいませんが、sales-info@classcat.com までご一報いただけると嬉しいです。
You have just found Keras.
Keras は最小限主義で、高度にモジュール化されたニューラルネットワーク・ライブラリで、Python で書かれ、TensorFlow か Theano のいずれかの上で動作することができます。速い実験を可能にすることに重点を置いて開発されました。アイデアから結果へできる限り早く至ることは良い研究を行うための鍵となります。
貴方が次のような深層学習ライブラリを必要とするならば Keras を使ってください :
- (総合的なモジュール化、最小主義そして拡張性を通じて)簡単で早いプロトタイピングを見込む。
- 畳み込みネットワークとリカレント・ネットワークの両者、そして2つの組み合わせをサポートする。
- (マルチ入力とマルチ出力訓練を含む)任意の結合スキームをサポートする。
- CPU と GPU 上でシームレスに実行する。
Keras は Python 2.7-3.5 互換です。
指針
- モジュール化 (Modularity) – モデルはスタンドアロンのグラフのシーケンス、殆ど制限なく一緒に接続可能な完全に構成可能なモジュールとして理解されます。特に、ニューラル層、コスト関数、オプティマイザ、初期化スキーム、活性化関数、regularization スキームは全てスタンドアロン・モジュールで、新しいモデルを作成するために結合することができます。
- 最小主義 (Minimalism) – 各モジュールは短く単純なものとして保持されるべきです。コードの全てのピースは初見で透過であるべきです。黒魔術はありません: それは反復速度と革新する能力を傷つけます。
- 簡単な拡張性 – 新しいモジュールは(新しいクラスや関数として)追加が超簡単です、そして既存のモジュールは十分な例を提供します。簡単に新しいモデルを作成できるということは総合的な表現力に寄与し、進んだ研究のために Keras を最適化します。
- Python と共に作業 – 切り離された、宣言形式 (declarative format) のモデル構成ファイルはありません。モデルは Python コードで記述され、コンパクトで、デバッグがより簡単で、そして拡張性を簡単にします。
Getting started: 30 秒で Keras
Keras の核となるデータ構造はモデルで、層をまとめる方法です。2つのタイプのモデルがあります: Sequential と Graph です。
これは Sequential モデル(層の線形的な積み重ね (a linear pile of layers))です。
from keras.models import Sequential model = Sequential()
層を重なるのは .add() のように簡単です :
from keras.layers.core import Dense, Activation model.add(Dense(output_dim=64, input_dim=100, init="glorot_uniform")) model.add(Activation("relu")) model.add(Dense(output_dim=10, init="glorot_uniform")) model.add(Activation("softmax"))
モデルが良さそうならば、.compile() で学習プロセスを構成します:
model.compile(loss='categorical_crossentropy', optimizer='sgd')
必要であれば、オプティマイザを更に構成することができます。Keras の核となる指針は物事を合理的に単純にすることですが、必要な時にはユーザが完全に制御可能です。(究極の制御はソースコードの簡単な拡張性です。)
from keras.optimizers import SGD model.compile(loss='categorical_crossentropy', optimizer=SGD(lr=0.01, momentum=0.9, nesterov=True))
今貴方はバッチの訓練データ上で反復可能です。
model.fit(X_train, Y_train, nb_epoch=5, batch_size=32)
他の方法として、貴方のモデルに手動でバッチを提供することもできます:
model.train_on_batch(X_batch, Y_batch)
一行でパフォーマンスを評価します:
objective_score = model.evaluate(X_test, Y_test, batch_size=32)
あるいは新しいデータについて予測を生成します:
classes = model.predict_classes(X_test, batch_size=32) proba = model.predict_proba(X_test, batch_size=32)
LTSM、深層 CNN、ニューラル・チューリング・マシン、word2vec embedder(埋め込み)あるいは他のモデルのネットワーク構築は同程度に速いです。深層学習の背後にあるアイデアは単純です、その実装が何故痛みを伴うべきなのでしょうか?
starter examples を見てください。
repo の examples フォルダ で、より進んだモデルを見つけるでしょう:メモリネットワークによる質疑応答、stacked LSTM によるテキスト生成、ニューラル・チューリング・マシン etc.
以上