MXNet : Model API 概要

MXNet : Model API 概要 (翻訳/解説)
翻訳 : (株)クラスキャット セールスインフォメーション
日時 : 02/24/2017

* 本ページは、MXNet 本家サイトの Model API の概要説明を翻訳した上で適宜、補足したものです:
    http://mxnet.io/api/python/model.html

 

model API は、一般的なベストプラクティスを使用するニューラルネットワークをトレーニングする単純化された方法を提供します。それは ndarray と記号型 module の上に作られた薄いラッパーでニューラルネットワークのトレーニングを簡単にします。

トピック:

* 訳注 : 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 上で並列に起きます。

 

以上