mxnetとgluonの使用と最適化

3844 ワード

けいさんせいのう
コマンドとシンボルのハイブリッドプログラミング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、その他の言語で読み取ることができます.
    ひどうきけいさん
    自動並列計算