MXNet (.json,.params)

予備知識

    • Wolfram言語で使用される,MXNetディープラーニングフレームワークの根底にある形式.
    • MXNetとして保存されたネットワークは,ネットワークトポロジーを指定する.jsonファイルと,ネットワークで使用される数値配列を指定する.paramsファイルの2つのファイルとして格納される.

ImportとExport

  • Import["file.json","MXNet"]はファイルとして保存されたMXNetネットワークをインポートし,可能なら対応する.paramsファイルから重みをロードする.
  • "file.json"に対応するパラメータファイルはパターン"file*.params"に合致し,同じフォルダに置かれているとされる.
  • Import["file.params","MXNet"]はネットワークパラメータを直接インポートするのにも使用できる.
  • Import["file.json",{"MXNet",elem}]Import["file.params",{"MXNet",elem}]は対応するファイルから指定の要素 elem をインポートする.
  • デフォルトではImport["file.json"]"MXNet"ではなく"JSON"形式としてインポートされる.
  • 一般的な情報は,以下の関数ページを参照のこと.
  • Import, Exportファイルからインポートする,あるいはファイルへエキスポートする
    CloudImport, CloudExportクラウドオブジェクトからインポートする,あるいはクラウドオブジェクトへエキスポートする
    ImportString, ExportString文字列からインポートする,あるいは文字列へエキスポートする
    ImportByteArray, ExportByteArrayバイト配列からインポートする,あるいはバイト配列へエキスポートする

Import要素

  • "Elements" ファイル中の有効な要素とオプションのリスト
    "Summary"ファイルの概要
    "Rules"使用可能なすべての要素の規則のリスト
  • .jsonファイルのインポートで使用できるネットワークImport要素:
  • "InputNames"ネットワーク入力の名前
    "NetExternalObject"ネットワークをNetExternalObjectとしてインポートする
    "NodeDataset"MXNetシンボルノードのデータ集合
    "NodeGraph"MXNetシンボルのノードのグラフ
    "NodeGraphPlot"MXNetシンボルのノードのプロット
  • Import["file.json","MXNet"]はデフォルトで"NetExternalObject"要素を使用する.
  • .paramsファイルのインポートで使用できるパラメータImport要素:
  • "ArrayAssociation"パラメータ配列を連想としてインポートする
    "ArrayList"パラメータ配列をリストとしてインポートする
    "ArrayNames"パラメータ配列の名前
  • Import["file.params","MXNet"]はデフォルトで"ArrayAssociation"要素を使用する.

オプション

  • Importオプション:
  • "ArrayPath"AutomaticMXNetパラメータファイルへのパス
  • Exportオプション:
  • "ArrayPath"Automaticパラメータ配列を保存するパス
    "SaveArrays"Trueネットワークパラメータ配列をエキスポートするかどうか

例題

すべて開くすべて閉じる

  (1)

NetChainを定義する:

ネットワークをMXNet形式にエキスポートする:

MXNet形式からネットワークをインポートする:

Import要素  (9)

InputNames  (1)

与えられたMXNetネットワークのネットワーク入力のリストを取得する:

NetExternalObject  (2)

MXNetネットワークをNetExternalObjectとしてインポートする:

これは以下と同等である:

MXNetネットワークが同じ名前のパラメータファイルを持つ場合,それも自動的にインポートされる:

"ArrayPath" オプションを使うと,パラメータファイルのインポートを回避でき,初期化されていないネットと同等のものを生成できる:

結果のNetExternalObjectには,不足している配列の値が与えられなければならないため,追加で入力する必要があることに注意する.

NodeDataset  (1)

MXNetシンボルのノードを見る:

NodeGraph  (1)

MXNetシンボルのノードのグラフを取得する:

グラフ内の頂点のリストを取得する:

NodeGraphPlot  (1)

MXNetシンボルのノードのプロットを取得する:

ArrayAssociation  (1)

MXNetネットワークの配列を連想としてインポートする:

これはパラメータファイルのパスを明示的に指定するのと同等である:

ArrayList  (1)

MXNetネットワークの配列をリストとしてインポートする:

ArrayNames  (1)

MXNetネットワークの配列の名前を取得する:

これは以下に等しい:

Importオプション  (1)

"ArrayPath"  (1)

"ArrayPath"にはパラメータファイルへの明示的なパスを指定することができる:

Noneに設定すると,パラメータはインポートされずに初期化されていないネットと同等のものを生成する:

結果のNetExternalObjectには,不足している配列の値が与えられなければならないため,追加で入力する必要があることに注意する.

考えられる問題  (4)

MXNetモデル定義は,入力次元と出力次元に関する情報を保持しない.指定された"Input"の次元で NetChainを定義する.

このネットワークをMXNet形式にエキスポートする:

入力の次元はインポート時に与えられなければならない.そうでなければ,この処理は失敗する:

一貫性のない次元を指定すると,MXNetから形状推定のエラーが出力される:

一貫した次元の最小のセットを与える必要がある.このケースでは,単一の入力の形状を与えるだけで残りのネットを推測するのに十分である.

要素のバッチに作用する MXNet演算子に変換されるレイヤーを含むネットワークは,ラウンドトリップ時に追加の入力次元が必要である.小さな畳み込みネットワークを作成する:

ネットワークをMXNet形式にエキスポートする:

同じ入力形状をオリジナルのネットワークに与えると,MXNetエラーが起こる:

追加の入力,つまりバッチサイズは,明示的に与えられなければならない.通常,任意の値を取ることができる:

ネットに添付されているどんなNetEncoderまたはNetDecoderもエキスポートできない:

インポートされたNetExternalObject はもはやNetEncoderを持たない:

可変長列に作用する再帰層はエキスポートできない:

列の長さを固定するとネットワークがエキスポートできる: