Main Content

このページの内容は最新ではありません。最新版の英語を参照するには、ここをクリックします。

exportONNXNetwork

ONNX モデル形式へのネットワークのエクスポート

説明

exportONNXNetwork(net,filename) は、ONNX™ 形式のファイル filename に重みを使用して深層学習ネットワーク net をエクスポートします。filename が存在する場合、exportONNXNetwork はファイルを上書きします。

この関数には、Deep Learning Toolbox™ Converter for ONNX Model Format サポート パッケージが必要です。このサポート パッケージがインストールされていない場合、関数によってダウンロード用リンクが表示されます。

exportONNXNetwork(net,filename,Name=Value) は、1 つ以上の名前と値の引数で指定された追加オプションを使用してネットワークをエクスポートします。

すべて折りたたむ

事前学習済みの SqueezeNet 畳み込みニューラル ネットワークを読み込みます。

net = squeezenet
net = 
  DAGNetwork with properties:

         Layers: [68×1 nnet.cnn.layer.Layer]
    Connections: [75×2 table]
     InputNames: {'data'}
    OutputNames: {'ClassificationLayer_predictions'}

ネットワーク netsqueezenet.onnx という ONNX 形式のファイルとしてエクスポートします。ファイルを現在のフォルダーに保存します。Deep Learning Toolbox Converter for ONNX Model Format サポート パッケージがインストールされていない場合、必要なサポート パッケージへのリンクが exportONNXNetwork によってアドオン エクスプローラーに表示されます。サポート パッケージをインストールするには、リンクをクリックして、[インストール] をクリックします。

filename = "squeezenet.onnx";
exportONNXNetwork(net,filename)

これで、ONNX インポートをサポートする深層学習フレームワークに squeezenet.onnx ファイルをインポートできます。

exportONNXNetwork を使用して、出力層を含む層グラフまたは出力層を含まない層グラフを ONNX 形式にエクスポートします。

事前学習済み SqueezeNet 畳み込みニューラル ネットワークを読み込み、事前学習済みネットワークを層グラフに変換します。

net = squeezenet;
lgraph1 = layerGraph(net)
lgraph1 = 
  LayerGraph with properties:

         Layers: [68×1 nnet.cnn.layer.Layer]
    Connections: [75×2 table]
     InputNames: {'data'}
    OutputNames: {'ClassificationLayer_predictions'}

層グラフを解析します。analyzeNetwork は、ネットワーク アーキテクチャの対話型プロット、およびネットワーク層についての情報が含まれる table を表示します。ONNX 形式にエクスポートする前に、層グラフ lgraph1 でエラーや問題を検出することもできます。lgraph1 はエラー フリーです。

analyzeNetwork(lgraph1)

analyzeLgraph1.png

層グラフ lgraph1 を、squeezeLayers1.onnx という名前の現在のフォルダーに ONNX 形式のファイルとしてエクスポートします。

exportONNXNetwork(lgraph1,"squeezeLayers1.onnx")

これで、ONNX インポートをサポートする深層学習フレームワークに squeezeLayers1.onnx ファイルをインポートできます。

lgraph1 の出力層を削除します。

lgraph2 = removeLayers(lgraph1,lgraph1.Layers(end).Name)
lgraph2 = 
  LayerGraph with properties:

         Layers: [67×1 nnet.cnn.layer.Layer]
    Connections: [74×2 table]
     InputNames: {'data'}
    OutputNames: {1×0 cell}

analyzeNetwork を使用して、層グラフ lgraph2 を解析します。層グラフの解析により、欠落している出力層と未接続の出力が検出されます。lgraph2 はまだ ONNX 形式にエクスポートできます。

analyzeNetwork(lgraph2)

analyzeLgraph2.png

層グラフ lgraph2 を、squeezeLayers2.onnx という名前の現在のフォルダーに ONNX 形式のファイルとしてエクスポートします。

exportONNXNetwork(lgraph2,"squeezeLayers2.onnx")

これで、ONNX インポートをサポートする深層学習フレームワークに squeezeLayers2.onnx ファイルをインポートできます。

入力引数

すべて折りたたむ

学習済みのネットワークまたはネットワーク層のグラフ。SeriesNetworkDAGNetworkdlnetwork、または LayerGraph オブジェクトとして指定します。

学習済みのネットワーク (SeriesNetworkDAGNetwork、または dlnetwork) は、次の方法で取得できます。

  • 事前学習済みのネットワークのインポート。たとえば、関数 googlenet を使用します。

  • カスタム ネットワークの学習。trainNetwork を使用して、SeriesNetwork または DAGNetwork に学習させます。trainnet またはカスタム学習ループを使用して、dlnetwork オブジェクトに学習させます。

LayerGraph オブジェクトはネットワーク層のグラフです。このグラフの一部の層パラメーターは空である可能性があります (たとえば、畳み込み層の重みとバイアス、およびバッチ正規化層の平均と分散)。exportONNXNetwork への入力引数として層グラフを使用する前に、ランダムな値を割り当てて空のパラメーターを初期化します。または、エクスポートする前に次のいずれかを実行できます。

  • 層グラフを dlnetwork への入力引数として使用して、LayerGraph オブジェクトを dlnetwork オブジェクトに変換する。空のパラメーターは自動的に初期化されます。

  • trainNetwork を使用して、LayerGraph オブジェクトを学習済みの DAGNetwork オブジェクトに変換する。層グラフを trainNetwork への layers 入力引数として使用します。

analyzeNetwork を使用して、ONNX ネットワークにエクスポートする前に、学習済みネットワークまたはネットワーク層のグラフでエラーや問題を検出できます。exportONNXNetwork では、SeriesNetworkDAGNetwork、および dlnetwork オブジェクトがエラー フリーである必要があります。exportONNXNetwork は、出力層がないか接続されていない LayerGraph オブジェクトをエクスポートすることを許可します。

ファイルの名前。文字ベクトルまたは string スカラーとして指定します。

例: "network.onnx"

名前と値の引数

オプションの引数のペアを Name1=Value1,...,NameN=ValueN として指定します。ここで、Name は引数名で、Value は対応する値です。名前と値の引数は他の引数の後に指定しなければなりませんが、ペアの順序は重要ではありません。

例: exportONNXNetwork(net,filename,NetworkName="my_net") はネットワークをエクスポートし、保存した ONNX ネットワークのネットワーク名として "my_net" を指定します。

保存したファイルに格納する ONNX ネットワークの名前。文字ベクトルまたは string スカラーとして指定します。

例: NetworkName="my_squeezenet"

エクスポートしたモデルで使用する ONNX 演算子セットのバージョン。[6 13] の範囲の正の整数として指定します。既定の演算子セットでエクスポートしようとするネットワークがサポートされていない場合、新しいバージョンを使用してみてください。エクスポートされたネットワークを別のフレームワークにインポートし、エクスポート時にインポーターによってサポートされない演算子セットを使用した場合、インポートが失敗する可能性があります。

適切な演算子セットのバージョンを使用していることを確認するには、ONNX 演算子のドキュメント[3]を参照してください。たとえば、OpsetVersion=9 は、maxUnpooling2dLayerMaxUnpool-9 ONNX 演算子にエクスポートします。

例: OpsetVersion=6

ONNX ネットワークのバッチ サイズ。[] または正の整数として指定します。BatchSize[] として指定すると、ONNX ネットワークのバッチ サイズは動的になります。BatchSize を正の整数 k として指定すると、ONNX ネットワークのバッチ サイズは k に固定されます。

例: BatchSize=10

制限

  • exportONNXNetwork でサポートされる ONNX のバージョンは、次のとおりです。

    • この関数は、ONNX 中間表現 version 7 をサポートしています。

    • この関数は、ONNX 演算子セット 6 ~ 14 をサポートしています。

  • exportONNXNetwork は、学習オプション、学習率係数、正則化係数など、ネットワーク学習に関連する設定またはプロパティをエクスポートしません。

  • ONNX 形式がサポートしない層 (ONNX のエクスポートでサポートされている層を参照) を含むネットワークをエクスポートする場合、exportONNXNetwork は、サポートされない層の代わりにプレースホルダー ONNX 演算子を保存し、警告を返します。プレースホルダー演算子が使用された ONNX ネットワークを他の深層学習フレームワークにインポートすることはできません。

  • MATLAB® と ONNX はアーキテクチャが異なるため、エクスポートされたネットワークと元のネットワークは構造が異なる場合があります。

メモ

エクスポートしたネットワークをインポートする場合、元のネットワークとは異なるネットワークの層が再インポートされ、サポート対象外となる可能性があります。

詳細

すべて折りたたむ

ONNX のエクスポートでサポートされている層

exportONNXNetwork は以下をエクスポートできます。

ヒント

  • 多入力多出力の学習済み MATLAB 深層学習ネットワークを、ONNX モデル形式にエクスポートできます。多入力多出力の深層学習ネットワークの詳細については、多入力および多出力ネットワークを参照してください。

参照

[1] Open Neural Network Exchange. https://github.com/onnx/.

[2] ONNX. https://onnx.ai/.

バージョン履歴

R2018a で導入