MXNet : Model API 概要 (翻訳/解説)
翻訳 : (株)クラスキャット セールスインフォメーション
日時 : 02/24/2017
* 本ページは、MXNet 本家サイトの Model API の概要説明を翻訳した上で適宜、補足したものです:
http://mxnet.io/api/python/model.html
序
model API は、一般的なベストプラクティスを使用するニューラルネットワークをトレーニングする単純化された方法を提供します。それは ndarray と記号型 module の上に作られた薄いラッパーでニューラルネットワークのトレーニングを簡単にします。
トピック:
- モデルをトレーニングする
- モデルを保存する
- 定期的な Checkpoint
- マルチデバイスを使用する
- Initializer API リファレンス
- Evaluation Metric API リファレンス
- Optimizer API リファレンス
- Model API リファレンス
* 訳注 : API リファレンスについては原文参照のこと。
モデルをトレーニングする
モデルをトレーニングするためには、2つのステップを実行します : sympol パラメータを使用してモデルを構築して、それからモデルを作成するために $model.Feedforward.create$ を呼び出します。次の例は2層のニューラルネットワークを作成します。
# configure a two layer neuralnetwork data = mx.symbol.Variable('data') fc1 = mx.symbol.FullyConnected(data, name='fc1', num_hidden=128) act1 = mx.symbol.Activation(fc1, name='relu1', act_type='relu') fc2 = mx.symbol.FullyConnected(act1, name='fc2', num_hidden=64) softmax = mx.symbol.SoftmaxOutput(fc2, name='sm') # create a model model = mx.model.FeedForward.create( softmax, X=data_set, num_epoch=num_epoch, learning_rate=0.01)
モデルを作成するために scikit-learn スタイルのコンスラクタと $fit$ 関数を使うこともできます。
# create a model using sklearn-style two-step way model = mx.model.FeedForward( softmax, num_epoch=num_epoch, learning_rate=0.01) model.fit(X=data_set)
モデルを保存する
ジョブが終了したら、ワークを保存します。モデルを保存するためには、Python でそれを直接 pickle することができます。また save と load 関数も提供しています。
# save a model to mymodel-symbol.json and mymodel-0100.params prefix = 'mymodel' iteration = 100 model.save(prefix, iteration) # load model back model_loaded = mx.model.FeedForward.load(prefix, iteration)
これら2つの save と load 関数の利点はこれらが言語不可知論者 (agnostic) であることです。Amazon S3 と HDFS のような、クラウド・ストレージに直接 save と load できるべきです。
定期的な Checkpointing
各 iteration 後にモデルを checkpoint することを推奨します。これを行なうためには、checkpoint コールバック do_checkpoint(path) を関数に追加します。トレーニング・プロセスは各 iteration 後に指定された場所に checkpoint します。
prefix='models/chkpt' model = mx.model.FeedForward.create( softmax, X=data_set, iter_end_callback=mx.callback.do_checkpoint(prefix), ...)
後で $Feedforward.load$ を使用して model checkpoint をロードできます。
マルチデバイスを使用する
その上でのトレーニングを望むデバイスのリストを $ctx$ にセットします。
devices = [mx.gpu(i) for i in range(num_device)] model = mx.model.FeedForward.create( softmax, X=dataset, ctx=devices, ...)
トレーニングは指定した GPU 上で並列に起きます。
以上