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 上で並列に起きます。
以上