mxnetとgluonの使用と最適化
3844 ワード
けいさんせいのう
コマンドとシンボルのハイブリッドプログラミングhybridize
シンボル:計算プロセスを定義する. 計算プロセスを実行可能なプログラムにコンパイルする. 所与の入力は、コンパイルされたプログラム実行を呼び出す.
コマンドプログラミングの方が便利です.Pythonでコマンドプログラミングを使用すると、ほとんどのコードが直感的に記述されます.同時に、コマンドプログラミングはデバッグしやすい.これは、すべての中間変数値を容易に取得して印刷したり、Pythonのデバッグツールを使用したりすることができるからです.
シンボルプログラミングはより効率的で移植しやすい.一方、コンパイル時にシステムがより最適化されやすい.一方、シンボルプログラミングは、Pythonに関係のないフォーマットにプログラムを変更することができ、Pythonインタプリタのパフォーマンスの問題を回避するために、Python以外の環境でプログラムを実行することができる.
ハイブリッドプログラミングでは,HybridBlockクラスまたはHybridSequentialクラスを用いてモデルを構築することができる.デフォルトでは、BlockクラスまたはSequentialクラスと同様にコマンドプログラミングに従って実行されます.hybridize関数を呼び出すと、Gluonはシンボルプログラミングに基づいて実行されます.
モデルnetが入力に基づいてモデル出力を計算した後、benchmark関数のnet(x)など、export関数を使用してシンボルプログラムとモデルパラメータをハードディスクに保存できます.
ひどうきけいさん
自動並列計算
コマンドとシンボルのハイブリッドプログラミングhybridize
シンボル:
コマンドプログラミングの方が便利です.Pythonでコマンドプログラミングを使用すると、ほとんどのコードが直感的に記述されます.同時に、コマンドプログラミングはデバッグしやすい.これは、すべての中間変数値を容易に取得して印刷したり、Pythonのデバッグツールを使用したりすることができるからです.
シンボルプログラミングはより効率的で移植しやすい.一方、コンパイル時にシステムがより最適化されやすい.一方、シンボルプログラミングは、Pythonに関係のないフォーマットにプログラムを変更することができ、Pythonインタプリタのパフォーマンスの問題を回避するために、Python以外の環境でプログラムを実行することができる.
ハイブリッドプログラミングでは,HybridBlockクラスまたはHybridSequentialクラスを用いてモデルを構築することができる.デフォルトでは、BlockクラスまたはSequentialクラスと同様にコマンドプログラミングに従って実行されます.hybridize関数を呼び出すと、Gluonはシンボルプログラミングに基づいて実行されます.
from mxnet import nd, sym
from mxnet.gluon import nn
import time
def get_net():
net = nn.HybridSequential() # HybridSequential
net.add(nn.Dense(256, activation='relu'),
nn.Dense(128, activation='relu'),
nn.Dense(2))
net.initialize()
return net
x = nd.random.normal(shape=(1, 512))
net = get_net()
net(x)
net.hybridize()
net(x)
モデルnetが入力に基づいてモデル出力を計算した後、benchmark関数のnet(x)など、export関数を使用してシンボルプログラムとモデルパラメータをハードディスクに保存できます.
net.export('my_mlp')
によって生成された.json
および.params
ファイルは、それぞれシンボルプログラムおよびモデルパラメータである.PythonまたはMXNetでサポートされている他のフロントエンド言語、例えばC+、R、Scala、Perl、その他の言語で読み取ることができます.ひどうきけいさん
自動並列計算