importNetworkFromPyTorch
説明
Add-On Required: この機能にはが必要です。
は、事前学習済みの PyTorch® モデルをファイル net = importNetworkFromPyTorch(modelfile)modelfile からインポートします。PyTorch モデルは、エクスポートされたプログラムまたはトレースされたモデルでなければなりません。エクスポートされたプログラム モデルは、より多くの Deep Learning Toolbox™ の組み込み層をもつモデルであるため、推奨されます。
モデルをインポート用に準備するために、PyTorch version 2.8 を使用してモデルをエクスポートすることを試みてください。モデルをエクスポートできない場合は、トレースします。詳細については、ヒントを参照してください。次のコードは、PyTorch モデルをインポート用に準備するために必要な手順の概要を示します。
# Ensure the layers are set to inference mode.
model.eval()
# Move the model to the CPU.
model.to("cpu")
# Generate input data.
X = torch.rand(1,3,224,224)
# For ExportedProgram models
# Export the model and save it in PyTorch version 2.8.
exported_model = torch.export.export(model, (X,))
torch.export.save(exported_model, 'myModel.pt2')
# For traced models
# Trace the model and save it.
traced_model = torch.jit.trace(model.forward, X)
traced_model.save('myModel.pt')
ヒント
ディープ ネットワーク デザイナーを使用して PyTorch モデルを対話形式でインポートします。インポート時に、アプリは注意が必要な問題の詳細を含むインポート レポートを表示します。詳細については、外部のプラットフォームからのネットワークのインポートを参照してください。
は、1 つ以上の名前と値の引数で指定された追加オプションを使用して、事前学習済みの PyTorch ネットワークをインポートします。たとえば、net = importNetworkFromPyTorch(modelfile,Name=Value)Namespace="CustomLayers" は、生成されたカスタム層と関連する関数を現在のフォルダーの +CustomLayers 名前空間に保存します。
ヒント
トレースされたモデルの場合、名前と値の引数 PyTorchInputSizes が指定されていると、この関数はより多くの Deep Learning Toolbox の組み込み層を返すことがあります。
例
事前学習済みかつトレース済みの PyTorch モデルを、初期化されていない dlnetwork オブジェクトとしてインポートします。次に、インポートしたネットワークに入力層を追加します。
この例では、MNASNet (Copyright© Soumith Chintala 2016) PyTorch モデルをインポートします。MNASNet は、ImageNet データベースのイメージを使って学習させるイメージ分類モデルです。MathWorks の Web サイトから、mnasnet1_0 ファイルをダウンロードします。ファイルのサイズは約 17 MB です。
modelfile = matlab.internal.examples.downloadSupportFile("nnet", ... "data/PyTorchModels/mnasnet1_0.pt");
importNetworkFromPyTorch 関数を使用して MNASNet モデルをインポートします。この関数は、入力層がなく初期化されていない dlnetwork オブジェクトとしてモデルをインポートします。ソフトウェアは、入力層の数、追加する入力層のタイプ、および入力層の追加方法に関する情報を含む警告を表示します。
net = importNetworkFromPyTorch(modelfile)
Warning: Network was imported as an uninitialized dlnetwork. Before using the network, add input layer(s): % Create imageInputLayer for the network input at index 1: inputLayer1 = imageInputLayer(<inputSize1>, Normalization="none"); % Add input layers to the network and initialize: net = addInputLayer(net, inputLayer1, Initialize=true);
net =
dlnetwork with properties:
Layers: [3×1 nnet.cnn.layer.Layer]
Connections: [2×2 table]
Learnables: [210×3 table]
State: [104×3 table]
InputNames: {'TopLevelModule:layers'}
OutputNames: {'TopLevelModule:classifier'}
Initialized: 0
View summary with summary.
インポートしたネットワークの入力サイズを指定して、イメージ入力層を作成します。次に、インポートしたネットワークにイメージ入力層を追加し、addInputLayer関数を使用してネットワークを初期化します。
InputSize = [224 224 3];
inputLayer = imageInputLayer(InputSize,Normalization="none");
net = addInputLayer(net,inputLayer,Initialize=true);インポートしたネットワークを解析し、入力層を表示します。ネットワークは予測に使用する準備ができています。
analyzeNetwork(net)

名前と値の引数 PyTorchInputSizes を使用して、事前学習済みかつトレース済みの PyTorch モデルを初期化された dlnetwork オブジェクトとしてインポートします。
この例では、MNASNet (Copyright© Soumith Chintala 2016) PyTorch モデルをインポートします。MNASNet は、ImageNet データベースのイメージを使って学習させるイメージ分類モデルです。MathWorks の Web サイトから、mnasnet1_0.pt ファイルをダウンロードします。ファイルのサイズは約 17 MB です。
modelfile = matlab.internal.examples.downloadSupportFile("nnet", ... "data/PyTorchModels/mnasnet1_0.pt");
名前と値の引数 PyTorchInputSizes が指定された importNetworkFromPyTorch 関数を使用して、MNASNet モデルをインポートします。224x224 のカラー イメージがこの PyTorch モデルの有効な入力サイズであることがわかっています。ソフトウェアは、イメージのバッチに対して入力層を自動的に作成して追加します。これにより、1 行のコードでネットワークを初期化されたネットワークとしてインポートすることができます。
net = importNetworkFromPyTorch(modelfile,PyTorchInputSizes=[NaN,3,224,224])
net =
dlnetwork with properties:
Layers: [4×1 nnet.cnn.layer.Layer]
Connections: [3×2 table]
Learnables: [210×3 table]
State: [104×3 table]
InputNames: {'InputLayer1'}
OutputNames: {'TopLevelModule:classifier'}
Initialized: 1
View summary with summary.
ネットワークは予測に使用する準備ができています。
事前学習済みかつトレース済みの PyTorch モデルを、初期化されていない dlnetwork オブジェクトとしてインポートします。次に、インポートしたネットワークを初期化します。
この例では、MNASNet (Copyright© Soumith Chintala 2016) PyTorch モデルをインポートします。MNASNet は、ImageNet データベースのイメージを使って学習させるイメージ分類モデルです。MathWorks の Web サイトから、mnasnet1_0 ファイルをダウンロードします。ファイルのサイズは約 17 MB です。
modelfile = matlab.internal.examples.downloadSupportFile("nnet", ... "data/PyTorchModels/mnasnet1_0.pt");
importNetworkFromPyTorch 関数を使用して MNASNet モデルをインポートします。この関数は、初期化されていない dlnetwork オブジェクトとしてモデルをインポートします。
net = importNetworkFromPyTorch(modelfile)
Warning: Network was imported as an uninitialized dlnetwork. Before using the network, add input layer(s): % Create imageInputLayer for the network input at index 1: inputLayer1 = imageInputLayer(<inputSize1>, Normalization="none"); % Add input layers to the network and initialize: net = addInputLayer(net, inputLayer1, Initialize=true);
net =
dlnetwork with properties:
Layers: [3×1 nnet.cnn.layer.Layer]
Connections: [2×2 table]
Learnables: [210×3 table]
State: [104×3 table]
InputNames: {'TopLevelModule:layers'}
OutputNames: {'TopLevelModule:classifier'}
Initialized: 0
View summary with summary.
net は、入れ子ネットワークを含む単一のnetworkLayer層で構成される dlnetwork オブジェクトです。net の入力サイズを指定し、ネットワークへの入力を表すランダムな dlarray オブジェクトを作成します。dlarray オブジェクトのデータ形式は、2 次元イメージ入力を表す "SSCB" (空間、空間、チャネル、バッチ) の次元をもたなければなりません。詳細については、dlnetwork での予測のためのデータ形式を参照してください。
InputSize = [224 224 3];
X = dlarray(rand(InputSize),"SSCB");initialize関数を使用して、インポートしたネットワークの学習可能なパラメーターを初期化します。
net = initialize(net,X);
これで、インポートしたネットワークを予測に使用する準備が整いました。expandLayers関数を使用して networkLayer を展開し、インポートしたネットワークを解析します。
netExpanded = expandLayers(net)
netExpanded =
dlnetwork with properties:
Layers: [152×1 nnet.cnn.layer.Layer]
Connections: [161×2 table]
Learnables: [210×3 table]
State: [104×3 table]
InputNames: {'TopLevelModule:layers:0'}
OutputNames: {'TopLevelModule:classifier:1:ATEN12'}
Initialized: 1
View summary with summary.
analyzeNetwork(netExpanded)

事前学習済みかつトレース済みの PyTorch モデルを、初期化されていない dlnetwork オブジェクトとしてインポートし、イメージを分類します。
この例では、MNASNet (Copyright© Soumith Chintala 2016) PyTorch モデルをインポートします。MNASNet は、ImageNet データベースのイメージを使って学習させるイメージ分類モデルです。MathWorks の Web サイトから、mnasnet1_0 ファイルをダウンロードします。ファイルのサイズは約 17 MB です。
modelfile = matlab.internal.examples.downloadSupportFile("nnet", ... "data/PyTorchModels/mnasnet1_0.pt");
importNetworkFromPyTorch 関数を使用して MNASNet モデルをインポートします。この関数は、初期化されていない dlnetwork オブジェクトとしてモデルをインポートします。
net = importNetworkFromPyTorch(modelfile)
Warning: Network was imported as an uninitialized dlnetwork. Before using the network, add input layer(s): % Create imageInputLayer for the network input at index 1: inputLayer1 = imageInputLayer(<inputSize1>, Normalization="none"); % Add input layers to the network and initialize: net = addInputLayer(net, inputLayer1, Initialize=true);
net =
dlnetwork with properties:
Layers: [3×1 nnet.cnn.layer.Layer]
Connections: [2×2 table]
Learnables: [210×3 table]
State: [104×3 table]
InputNames: {'TopLevelModule:layers'}
OutputNames: {'TopLevelModule:classifier'}
Initialized: 0
View summary with summary.
インポートしたネットワークの入力サイズを指定して、イメージ入力層を作成します。次に、インポートしたネットワークにイメージ入力層を追加し、addInputLayer 関数を使用してネットワークを初期化します。
InputSize = [224 224 3];
inputLayer = imageInputLayer(InputSize,Normalization="none");
net = addInputLayer(net,inputLayer,Initialize=true);分類するイメージを読み取ります。
Im = imread("peppers.png");イメージのサイズをネットワークの入力サイズに変更します。イメージを表示します。
InputSize = [224 224 3]; Im = imresize(Im,InputSize(1:2)); imshow(Im)

MNASNet への入力には、さらなる前処理が必要です。イメージを再スケーリングします。次に、学習イメージの平均を減算し、学習イメージの標準偏差で除算して、イメージを正規化します。詳細については、入力データの前処理を参照してください。
Im = rescale(Im,0,1); meanIm = [0.485 0.456 0.406]; stdIm = [0.229 0.224 0.225]; Im = (Im - reshape(meanIm,[1 1 3]))./reshape(stdIm,[1 1 3]);
イメージをdlarrayオブジェクトに変換します。"SSCB" (空間、空間、チャネル、バッチ) の次元でイメージの形式を整えます。
Im_dlarray = dlarray(single(Im),"SSCB");同じく ImageNet のイメージで学習させた squeezenet から、クラス名を取得します。
[~,ClassNames] = imagePretrainedNetwork("squeezenet");イメージを分類し、予測されたラベルを見つけます。
prob = predict(net,Im_dlarray); [~,label_ind] = max(prob);
分類結果を表示します。
ClassNames(label_ind)
ans = "bell pepper"
事前学習済みかつトレース済みの PyTorch モデルを、初期化されていない dlnetwork オブジェクトとしてインポートします。次に、ソフトウェアによって生成されたカスタム層を見つけます。
この例では、findCustomLayers 補助関数を使用します。
この例では、MNASNet (Copyright© Soumith Chintala 2016) PyTorch モデルをインポートします。MNASNet は、ImageNet データベースのイメージを使って学習させるイメージ分類モデルです。MathWorks の Web サイトから、mnasnet1_0 ファイルをダウンロードします。ファイルのサイズは約 17 MB です。
modelfile = matlab.internal.examples.downloadSupportFile("nnet", ... "data/PyTorchModels/mnasnet1_0.pt");
importNetworkFromPyTorch 関数を使用して MNASNet モデルをインポートします。この関数は、初期化されていない dlnetwork オブジェクトとしてモデルをインポートします。
net = importNetworkFromPyTorch(modelfile)
Warning: Network was imported as an uninitialized dlnetwork. Before using the network, add input layer(s): % Create imageInputLayer for the network input at index 1: inputLayer1 = imageInputLayer(<inputSize1>, Normalization="none"); % Add input layers to the network and initialize: net = addInputLayer(net, inputLayer1, Initialize=true);
net =
dlnetwork with properties:
Layers: [3×1 nnet.cnn.layer.Layer]
Connections: [2×2 table]
Learnables: [210×3 table]
State: [104×3 table]
InputNames: {'TopLevelModule:layers'}
OutputNames: {'TopLevelModule:classifier'}
Initialized: 0
View summary with summary.
net は、入れ子ネットワークを含む単一のnetworkLayer層で構成される dlnetwork オブジェクトです。expandLayers関数を使用して、入れ子ネットワーク層を展開します。
net = expandLayers(net);
importNetworkFromPyTorch 関数は、MATLAB の組み込みの層または関数に変換できない PyTorch 層のカスタム層を生成します。詳細については、アルゴリズムを参照してください。ソフトウェアは、自動的に生成されたカスタム層を現在のフォルダーの +mnasnet1_0 名前空間に保存し、関連する関数を +ops 内部名前空間に保存します。カスタム層と関連する関数を確認するには、名前空間を調べます。

findCustomLayers 補助関数を使用して、生成されたカスタム層のインデックスを見つけることもできます。カスタム層を表示します。
ind = findCustomLayers(net.Layers,'+mnasnet1_0')ind = 1×2
150 152
net.Layers(ind)
ans =
2×1 Layer array with layers:
1 'TopLevelModule:ATEN14' Custom Layer mnasnet1_0.TopLevelModule_ATEN14
2 'TopLevelModule:classifier:1:ATEN12' Custom Layer mnasnet1_0.TopLevelModule_classifier_1_ATEN12
補助関数
findCustomLayers 補助関数は、importNetworkFromPyTorch によって自動的に生成されるカスタム層の indices に対応する logical ベクトルを返します。
function indices = findCustomLayers(layers,Namespace) s = what(['.' filesep Namespace]); indices = zeros(1,length(s.m)); for i = 1:length(layers) for j = 1:length(s.m) if strcmpi(class(layers(i)),[Namespace(2:end) '.' s.m{j}(1:end-2)]) indices(j) = i; end end end end
入力引数
PyTorch モデル ファイルの名前。文字ベクトルまたは string スカラーとして指定します。modelfile は現在のフォルダー内にあるか、ファイルへの絶対パスまたは相対パスが含まれていなければなりません。PyTorch モデルは事前学習されていなければならず、かつ次のいずれかである必要があります。
1 回の推論反復にわたってトレースされていること。PyTorch モデルをトレースする方法については、https://docs.pytorch.org/docs/stable/generated/torch.jit.trace.htmlおよび学習済みの PyTorch モデルのトレースと保存を参照してください。
PyTorch version
2.8でtorch.export.export()を使用してエクスポートされていること。PyTorch モデルをエクスポートする方法については、学習済みの PyTorch モデルのエクスポートと保存およびhttps://docs.pytorch.org/docs/stable/export.htmlを参照してください。 (R2026a 以降)
例: "mobilenet_v3.pt"
名前と値の引数
オプションの引数のペアを Name1=Value1,...,NameN=ValueN として指定します。ここで、Name は引数名で、Value は対応する値です。名前と値の引数は他の引数の後に指定しなければなりませんが、ペアの順序は重要ではありません。
例: importNetworkFromPyTorch(modelfile,Namespace="CustomLayers") は、modelfile 内のネットワークをインポートし、カスタム層の名前空間 + を現在のフォルダーに保存します。Namespace
importNetworkFromPyTorch がカスタム層を保存するカスタム層名前空間の名前。文字ベクトルまたは string スカラーとして指定します。importNetworkFromPyTorch は、カスタム層の名前空間 + を現在のフォルダーに保存します。NamespaceNamespace を指定しない場合、importNetworkFromPyTorch は、カスタム層を現在のフォルダー内の名前空間 + に保存します。名前空間の詳細については、名前空間の作成を参照してください。modelfile
カスタムの PyTorch 層をインポートしたとき、またはソフトウェアが PyTorch 層をそれと等価な組み込みの MATLAB® 層に変換できないとき、importNetworkFromPyTorch はカスタム層の生成を試みます。importNetworkFromPyTorch は、生成した各カスタム層を、+ で個別の MATLAB コード ファイルとして保存します。カスタム層を表示または編集するには、関連する MATLAB コード ファイルを開きます。カスタム層の詳細については、カスタム層を参照してください。Namespace
+ 名前空間には、Namespace+ops 内部名前空間を含めることもできます。この内部名前空間には、自動生成されたカスタム層が使用する PyTorch 演算子に対応する MATLAB 関数が格納されます。importNetworkFromPyTorch は、各演算子に関連する MATLAB 関数を +ops 内部名前空間の個別の MATLAB コード ファイルに保存します。dlnetwork のオブジェクト関数 (predict 関数など) は、カスタム層とやり取りするときにこれらの演算子を使用します。+ops 内部名前空間にはプレースホルダー関数を含めることもできます。詳細については、プレースホルダー関数を参照してください。
例: Namespace="mobilenet_v3"
PyTorch ネットワーク入力の次元サイズ。数値配列、string スカラー、または cell 配列として指定します。次元の入力順序は PyTorch ネットワークと同じです。ネットワークへの入力が単一の非スカラー入力である場合にのみ、PyTorchInputSizes を数値配列として指定できます。ネットワークに複数の入力がある場合、PyTorchInputSizes は入力サイズの cell 配列でなければなりません。入力のサイズまたは形状が不明な場合、PyTorchInputSize を "unknown" として指定します。入力が PyTorch の 0 次元スカラーに対応する場合、PyTorchInputSize を "scalar" として指定します。
importNetworkFromPyTorch がサポートする標準入力層は、ImageInputLayer (SSCB)、FeatureInputLayer (CB)、ImageInputLayer3D (SSSCB)、および SequenceInputLayer (CBT) です。ここで、S は空間、C はチャネル、B はバッチ、T は時間です。importNetworkFromPyTorch は、PyTorchInputSizes を使用した非標準の入力もサポートします。たとえば、関数呼び出し net = importNetworkFromPyTorch("nonStandardModel.pt",PyTorchInputSizes=[1 3 224]) を使用し、ネットワークをインポートして入力次元のサイズを指定します。次に、関数呼び出し X = dlarray(rand(1 3 224),"UUU") および net = initialize(net,X) を使用し、U のラベル (U は不明を表す) が付けられた dlarray オブジェクトを使ってネットワークを初期化します。ソフトウェアは、U のラベルが付けられた dlarray を PyTorch の順序に従うデータとして解釈します。
例: PyTorchInputSizes=[NaN 3 224 224] は、イメージのバッチである 1 つの入力をもつネットワークです。
例: PyTorchInputSizes={[NaN 3 224 224],"unknown"} は、2 つの入力をもつネットワークです。最初の入力はイメージのバッチであり、2 番目の入力のサイズは不明です。
データ型: numeric array | string | cell array
ネットワーク構成の表現。次のいずれかの値として指定します。
"networklayer"—networkLayer層オブジェクトを使用して、インポートされたネットワーク内のネットワーク構成を表現します。この値を指定すると、ソフトウェアは、カスタム層の数が増えないという制約の下で可能な限り多くの PyTorch 関数を Deep Learning Toolbox 層に変換します。"customlayer"— 入れ子のカスタム層を使用して、インポートされたネットワーク内のネットワーク構成を表現します。この値を指定すると、importNetworkFromPyTorchは、一連の PyTorch 関数を Deep Learning Toolbox 関数に変換してから、それらをカスタム層に統合します。カスタム層の詳細については、カスタム深層学習層の定義を参照してください。
例: PreferredNestingType="customlayer"
データ型: char | string
出力引数
事前学習済みの PyTorch ネットワーク。dlnetwork オブジェクトとして返されます。
addInputLayer関数を使用せずにネットワークの入力層を編集する場合は、ネットワークのInputNamesプロパティを更新しなければなりません。出力層を編集する場合はOutputNamesを更新しなければなりません。ネットワークが初期化されていない場合は、使用する前に入力層を追加するか、ネットワークを初期化しなければなりません。例については、PyTorch からのネットワークのインポートと入力層の追加とPyTorch からのネットワークのインポートと初期化を参照してください。
制限
importNetworkFromPyTorch関数は、PyTorch version 2.8 で作成されたエクスポート済みネットワークをサポートします。この関数は、他のバージョンの PyTorch で作成されたトレース済みネットワークをサポートできる場合があります。動的な形状でエクスポートされた
ExportedProgram形式のモデルのインポートはサポートされていません。
詳細
importNetworkFromPyTorch は、PyTorch version 2.8 で保存された ExportedProgram モデル形式の事前学習済み PyTorch モデルを受け入れます。保存する前に、torch.export.export() コマンドを使用してモデルをエクスポートします。次に、エクスポートしたモデルを save メソッドで保存します。次のコードは、サンプル入力 X を使用して PyTorch モデルをエクスポートする例を示しています。この例の PyTorch モデルは、サイズ (1,3,224,224) の入力を受け入れます。
# Ensure the layers are set to inference mode.
model.eval()
# Move the model to the CPU.
model.to("cpu")
# Generate input data.
X = torch.rand(1,3,224,224)
# Export the model.
exported_model = torch.export.export(model, (X,))
# Save the exported model.
torch.export.save(exported_model, 'myModel.pt2')
詳細については、https://docs.pytorch.org/docs/stable/export.htmlを参照してください。
importNetworkFromPyTorch は、事前学習済みかつトレース済みの PyTorch モデルを受け入れます。保存する前に、torch.jit.trace() コマンドを使用してモデルをトレースします。次に、トレースしたモデルを save メソッドで保存します。次のコードは、サンプル入力 X を使用して PyTorch モデルのトレースと保存を行う例を示しています。この例の PyTorch モデルは、サイズ (1,3,224,224) の入力を受け入れます。
# Ensure the layers are set to inference mode.
model.eval()
# Move the model to the CPU.
model.to("cpu")
# Generate input data.
X = torch.rand(1,3,224,224)
# Trace the model.
traced_model = torch.jit.trace(model.forward, X)
# Save the traced model.
traced_model.save('myModel.pt')
詳細については、https://docs.pytorch.org/docs/stable/generated/torch.jit.trace.htmlを参照してください。
importNetworkFromPyTorch 関数が PyTorch 層を組み込みの MATLAB 層に変換できない場合、または関連付けられた MATLAB 関数を使ってカスタム層を生成できない場合、この関数はプレースホルダー関数を使ってカスタム層を作成します。プレースホルダー関数は、ネットワークを使用する前に補完しなければなりません。
次のコードの抜粋は、pyAtenUnsupportedOperator プレースホルダー関数を使用してカスタム層を定義します。
classdef UnsupportedOperator < nnet.layer.Layer function [output] = predict(obj,arg1) % Placeholder function for aten::<unsupportedOperator> output= pyAtenUnsupportedOperator(arg1,params); end end
importNetworkFromPyTorch 関数は、このセクションにリストされている PyTorch の層、関数、および演算子をサポートし、dlarray がサポートされた MATLAB の組み込みの層および関数にそれらを変換します。dlarray オブジェクトを操作する関数の詳細については、dlarray をサポートする関数の一覧を参照してください。多くの場合、この変換処理には制限があります。
次の表は、PyTorch 層と Deep Learning Toolbox 層の対応を示しています。importNetworkFromPyTorch は、PyTorch 層を MATLAB 層に変換できないことがあります。その場合、ソフトウェアは、dlarray がサポートされた Deep Learning Toolbox 関数に PyTorch 層を変換します。
| PyTorch 層 | 対応する Deep Learning Toolbox の層 | 代替の Deep Learning Toolbox 関数 |
|---|---|---|
torch.nn.AdaptiveAvgPool2d | adaptiveAveragePooling2dLayer | pyAdaptiveAvgPool2d |
torch.nn.AvgPool1d | averagePooling1dLayer | pyAvgPool |
torch.nn.AvgPool2d | averagePooling2dLayer | pyAvgPool |
torch.nn.AvgPool3d | 適用不可 | pyAvgPool |
torch.nn.BatchNorm2d | batchNormalizationLayer | pyBatchNorm |
torch.nn.Conv1d | convolution1dLayer | pyConvolution |
torch.nn.Conv2d | convolution2dLayer | pyConvolution |
torch.nn.Conv3d | convolution3dLayer | pyConvolution |
torch.nn.ConvTranspose1d | transposedConv1dLayer | pyConvolution |
torch.nn.ConvTranspose2d | transposedConv2dLayer | pyConvolution |
torch.nn.ConvTranspose3d | transposedConv3dLayer | pyConvolution |
torch.nn.Dropout | dropoutLayer | pyDropout |
torch.nn.Dropout2d | spatialDropoutLayer | pyFeatureDropout |
torch.nn.Embedding | embeddingLayer | pyEmbedding |
torch.nn.GELU | geluLayer | pyGelu |
torch.nn.GLU | 適用不可 | pyGLU |
torch.nn.GroupNorm | groupNormalizationLayer | pyGroupNorm |
torch.nn.GRU | gruLayer | Not applicable |
torch.nn.LayerNorm | layerNormalizationLayer | pyLayerNorm |
torch.nn.LSTM | lstmLayer または bilstmLayer | 適用不可 |
torch.nn.LeakyReLU | leakyReluLayer | pyLeakyRelu |
torch.nn.Linear | fullyConnectedLayer | pyLinear |
torch.nn.MaxPool1d | maxPooling1dLayer | pyMaxPool1d |
torch.nn.MaxPool2d | maxPooling2dLayer | pyMaxPool2d |
torch.nn.MaxPool3d | maxPooling3dLayer | pyMaxPool3d |
torch.nn.MultiheadAttention |
| 適用不可 |
torch.nn.PReLU | preluLayer | pyPReLU |
torch.nn.ReLU | reluLayer | relu |
torch.nn.SiLU | swishLayer | pySilu |
torch.nn.Sigmoid | sigmoidLayer | pySigmoid |
torch.nn.Softmax | nnet.pytorch.layer.SoftmaxLayer | pySoftmax |
torch.nn.Softplus | softplusLayer | pySoftplus |
torch.nn.Tanh | tanhLayer | tanh |
torch.nn.Upsample | resize2dLayer (Image Processing Toolbox) | pyUpsample2d (Image Processing Toolbox™ が必要) |
torch.nn.UpsamplingNearest2d | resize2dLayer (Image Processing Toolbox) | pyUpsample2d (Image Processing Toolbox が必要) |
torch.nn.UpsamplingBilinear2d | resize2dLayer (Image Processing Toolbox) | pyUpsample2d (Image Processing Toolbox が必要) |
次の表は、Python® Hugging Face® トランスフォーマー層と Deep Learning Toolbox 層の対応を示しています。
Python Hugging Face トランスフォーマー層 | 対応する Deep Learning Toolbox の層 |
|---|---|
transformers.models.bert.modeling_bert.BertAttention | 次の層を含む
Python |
transformers.models.bert.modeling_bert.RobertaSelfAttention | 次の層を含む
Python |
transformers.models.distilbert.modeling_distilbert.MultiheadSelfAttention |
|
次の表は、PyTorch 関数と Deep Learning Toolbox の層および関数の対応を示しています。名前と値の引数 PreferredNestingType の値によって、importNetworkFromPyTorch が PyTorch 関数を層に変換するか関数に変換するかが決まります。
| PyTorch 関数 | 対応する Deep Learning Toolbox の層 | 対応する Deep Learning Toolbox 関数 |
|---|---|---|
torch.nn.functional.adaptive_avg_pool2d | adaptiveAveragePooling2dLayer | pyAdaptiveAvgPool2d |
torch.nn.functional.avg_pool1d | averagePooling1dLayer | pyAvgPool |
torch.nn.functional.avg_pool2d | averagePooling2dLayer | pyAvgPool |
torch.nn.functional.avg_pool3d | 適用不可 | pyAvgPool |
torch.nn.functional.conv1d | convolution1dLayer | pyConvolution |
torch.nn.functional.conv2d | convolution2dLayer | pyConvolution |
torch.nn.functional.conv3d | convolution3dLayer | pyConvolution |
torch.nn.functional.dropout | dropoutLayer | pyDropout |
torch.nn.functional.embedding | embeddingLayer | pyEmbedding |
torch.nn.functional.gelu | geluLayer | pyGelu |
torch.nn.functional.glu | 適用不可 | pyGLU |
torch.nn.functional.hardsigmoid | 適用不可 | pyHardSigmoid |
torch.nn.functional.hardswish | 適用不可 | pyHardSwish |
torch.nn.functional.instance_norm | batchNormalizationLayer または instanceNormalizationLayer | pyBatchNorm または pyInstanceNorm |
torch.nn.functional.layer_norm | layerNormalizationLayer | pyLayerNorm |
torch.nn.functional.leaky_relu | leakyReluLayer | pyLeakyRelu |
torch.nn.functional.linear | fullyConnectedLayer | pyLinear |
torch.nn.functional.log_softmax | 適用不可 | pyLogSoftmax |
torch.nn.functional.pad | 適用不可 | pyPad |
torch.nn.functional.max_pool1d | maxPooling1dLayer | pyMaxPool1d |
torch.nn.functional.max_pool2d | maxPooling2dLayer | pyMaxPool2d |
torch.nn.functional.max_pool3d | maxPooling3dLayer | pyMaxPool3d |
torch.nn.functional.prelu | preluLayer | pyPReLU |
torch.nn.functional.relu | reluLayer | relu |
torch.nn.functional.silu | swishLayer | pySilu |
torch.nn.functional.softmax | nnet.pytorch.layer.SoftmaxLayer | pySoftmax |
torch.nn.functional.tanh | tanhLayer | tanh |
torch.nn.functional.upsample | resize2dLayer (Image Processing Toolbox) | pyUpsample2d (Image Processing Toolbox が必要) |
次の表は、PyTorch 演算子と Deep Learning Toolbox 関数の対応を示しています。importNetworkFromPyTorch は、まず cat PyTorch 演算子から連結層への変換を試みた後、関数への変換を試みます。
| PyTorch 演算子 | 対応する Deep Learning Toolbox の層または関数 | 代替の Deep Learning Toolbox 関数 |
|---|---|---|
+, -, /, *, ^ | scalingLayer | pyElementwiseAffine |
torch.abs | pyAbs | 適用不可 |
torch.add | additionLayer | pyElementwiseBinary |
torch.addmm | pyBaddbmm | 適用不可 |
torch.arange | pyArange | 適用不可 |
torch.argmax | pyArgMax | 適用不可 |
torch.as_strided | pyAsStrided | 適用不可 |
torch.baddbmm | pyBaddbmm | 適用不可 |
torch.bitwise_not | pyBitwiseNot | 適用不可 |
torch.bmm | pyMatMul | 適用不可 |
torch.cat | concatenationLayer | pyConcat |
torch.chunk | pyChunk | 適用不可 |
torch.clamp | pyClamp | 適用不可 |
torch.clamp_min | pyClampMin | 適用不可 |
torch.clone | pyIdentity | 適用不可 |
torch.concat | pyConcat | 適用不可 |
torch.cos | pyCos | 適用不可 |
torch.cumsum | pyCumsum | 適用不可 |
torch.detach | pyDetach | 適用不可 |
torch.eq | pyEq | 適用不可 |
torch.flatten | nnet.pytorch.layer.Flatten2DLayer | pyFlatten |
torch.floor_div | pyElementwiseBinary | 適用不可 |
torch.fmod | pyFmod | 適用不可 |
torch.full | pyFull | 適用不可 |
torch.full_like | pyFullLike | 適用不可 |
torch.gather | pyGather | 適用不可 |
torch.ge | pyGe | 適用不可 |
torch.gt | pyGt | 適用不可 |
torch.index_select | pyIndexSelect | 適用不可 |
torch.matmul | pyMatMul | 適用不可 |
torch.max | pyMaxBinary/pyMaxUnary | 適用不可 |
torch.mean | pyMean | 適用不可 |
torch.mm | pyMatMul | 適用不可 |
torch.mul, * | multiplicationLayer または scalingLayer | pyElementwiseAffine |
torch.neg | scalingLayer | pyElementwiseAffine |
torch.ne | pyNe | 適用不可 |
torch.neg | pyNeg | 適用不可 |
torch.norm | pyNorm | 適用不可 |
torch.ones | pyOnes | 適用不可 |
torch.permute | permuteLayer | pyPermute |
torch.pow | pyElementwiseBinary | 適用不可 |
torch.remainder | pyRemainder | 適用不可 |
torch.repeat | pyRepeat | 適用不可 |
torch.repeat_interleave | pyRepeatInterleave | 適用不可 |
torch.reshape | permuteLayer および reshapeLayer | pyView |
torch.roll | pyRoll | 適用不可 |
torch.rsqrt | pyRsqrt | 適用不可 |
torch.select | pySlice | 適用不可 |
torch.size | pySize | 適用不可 |
torch.sin | pySin | 適用不可 |
torch.slice_scatter | pySliceScatter | 適用不可 |
torch.split | pySplitWithSizes | 適用不可 |
torch.sqrt | pyElementwiseBinary | 適用不可 |
torch.square | pySquare | 適用不可 |
torch.squeeze | pySqueeze | 適用不可 |
torch.stack | pyStack | 適用不可 |
torch.sub | pyElementwiseBinary | 適用不可 |
torch.sum | pySum | 適用不可 |
torch.swapaxes | pyTranspose | 適用不可 |
torch.t | pyT | 適用不可 |
torch.tanh | tanhLayer | tanh |
torch.to | pyTo | 適用不可 |
torch.transpose | pyTranspose | 適用不可 |
torch.unsqueeze | pyUnsqueeze | 適用不可 |
torch.zeros | pyZeros | 適用不可 |
torch.zeros_like | pyZerosLike | 適用不可 |
torch.linalg.vector_norm | pyNorm | 適用不可 |
インデックス (例: X[:,1]) | pySlice | 適用不可 |
torch.tensor.contiguous | = | 適用不可 |
torch.tensor.expand | pyExpand | 適用不可 |
torch.tensor.expand_as | pyExpandAs | 適用不可 |
torch.tensor.Int | pyInt | 適用不可 |
torch.tensor.masked_fill | pyMaskedFill | 適用不可 |
torch.tensor.select | pySlice | 適用不可 |
torch.tensor.view | permuteLayer および reshapeLayer | pyView |
ヒント
PyTorch モデルをインポート用に準備するには、トレースではなく
torch.export.export()を使用したエクスポートが推奨されます。ExportedProgram形式は、モデルの計算グラフ、入力と出力の仕様、パラメーターを決定論的な構造で取り込む、フレームワーク非依存の安定したファイルを提供します。この形式により、ソフトウェアは、初期化され、より多くの MATLAB の組み込み層で構成されたモデルをインポートできます。トレースされたモデルをインポートする際に、PyTorch の層を MATLAB の組み込み層としてより適切にインポートできるようにするには、
PyTorchInputSizesを指定します。事前学習済みのネットワークを新しいイメージの予測または転移学習に使用するには、インポートしたモデルの学習に使用したイメージと同じようにイメージを前処理しなければなりません。最も一般的な前処理ステップは、イメージのサイズ変更、イメージの平均値の減算、イメージの BGR 形式から RGB 形式への変換です。
学習および予測用のイメージの前処理の詳細については、イメージの深層学習向け前処理を参照してください。
名前空間
+の親フォルダーが MATLAB パス上にない場合、この名前空間のメンバーにアクセスすることはできません。詳細については、名前空間と MATLAB パスを参照してください。NamespaceMATLAB は 1 ベースのインデックスを使用しますが、Python は 0 ベースのインデックスを使用します。つまり、配列の最初の要素のインデックスは、MATLAB と Python でそれぞれ 1 と 0 になります。MATLAB のインデックスの詳細については、配列インデックス付けを参照してください。MATLAB で、Python で作成されたインデックス (
ind) の配列を使用するには、配列をind+1に変換します。Python ライブラリの競合が発生した場合は、
pyenv関数を使用して、名前と値の引数ExecutionModeを"OutOfProcess"として指定します。その他のヒントについては、TensorFlow、PyTorch、および ONNX からモデルをインポートする際のヒントを参照してください。
アルゴリズム
importNetworkFromPyTorch 関数は、次の手順を順番に試し、PyTorch 層を MATLAB にインポートします。
関数は、PyTorch 層を組み込みの MATLAB 層としてインポートすることを試みます。詳細については、PyTorch 層の変換を参照してください。
関数は、PyTorch 層を組み込みの MATLAB 関数としてインポートすることを試みます。詳細については、PyTorch 層の変換を参照してください。
関数は、PyTorch 層をカスタム層としてインポートすることを試みます。
importNetworkFromPyTorchは、生成されたカスタム層および関連する関数を+名前空間に保存します。例については、PyTorch からのネットワークのインポートおよび生成されたカスタム層の検索を参照してください。Namespace関数は、プレースホルダー関数を含むカスタム層として PyTorch 層をインポートします。プレースホルダー関数は、ネットワークを使用する前に補完しなければなりません。プレースホルダー関数を参照してください。
最初の 3 つのケースでは、インポートされたネットワークは初期化後に予測の準備が整います。
代替機能
アプリ
ディープ ネットワーク デザイナーアプリを使用して、外部プラットフォームからネットワークをインポートすることもできます。アプリは importNetworkFromPyTorch 関数を使用してネットワークをインポートし、進行状況ダイアログ ボックスを表示します。インポート プロセス中に、アプリはネットワークに入力層を追加し (可能な場合)、注意が必要な問題の詳細を含むインポート レポートを表示します。ネットワークをインポートした後、ネットワークを対話的に編集、可視化、および解析できます。ネットワークの編集が完了したら、それを Simulink® にエクスポートするか、ネットワークを構築するための MATLAB コードを生成できます。
ブロック
PyTorch Model Predict ブロックを使用して PyTorch ネットワークを扱うこともできます。このブロックを使用すると、Python 関数を読み込んでデータを前処理および後処理したり、入力端子と出力端子を対話的に構成したりすることもできます。
バージョン履歴
R2022b で導入torch.export.export() を使用してエクスポートされたモデルを ExportedProgram モデルとしてインポートします。モデルは PyTorch version 2.8 を使用してエクスポートしなければなりません。
ディープ ネットワーク デザイナー アプリと importNetworkFromPyTorch 関数を使用して、次の PyTorch の層および関数を Deep Learning Toolbox の層または関数にインポートします。
torch.nn.AvgPool3dtorch.nn.Conv3dtorch.nn.ConvTranspose3dtorch.nn.functional.instance_normtorch.nn.functional.max_pool3dtorch.nn.Softplusbidirectional=Trueを指定したtorch.nn.LSTMtorch.nn.GRU
importNetworkFromPyTorch 関数を使用して、次の PyTorch 演算子を Deep Learning Toolbox の層または関数にインポートします。
torch.as_stridedtorch.clamptorch.fmodtorch.fulltorch.full_liketorch.gttorch.index_selecttorch.netorch.onestorch.rolltorch.slice_scattertorch.Tensor.Inttorch.swapaxestorch.reshapetorch.permute
名前と値の引数 PyTorchInputSizes を指定して、torch.nn.Linear 層を Deep Learning Toolbox の fullyConnectedLayer にインポートすることもできます。
importNetworkFromPyTorch は、dlnetwork の InputNames プロパティと OutputNames プロパティを使用して、入力と出力の順序を設定します。
addInputLayer関数を使用せずにネットワークの入力を更新する場合は、InputNamesプロパティも更新しなければなりません。ネットワークの出力を更新する場合は、
OutputNamesプロパティも更新しなければなりません。
PyTorch ネットワークをインポートする場合、次の条件が満たされると、importNetworkFromPyTorch は PyTorch 関数を Deep Learning Toolbox 層に変換します。
名前と値の引数
PreferredNestingTypeが"networklayer"である。PyTorch 関数に、同等の Deep Learning Toolbox 層が含まれている。
PyTorch 関数が、ネットワークの先頭にあるか、PyTorch 層の後に続くか、Deep Learning Toolbox 層に変換された PyTorch 層の後に続く。
importNetworkFromPyTorch は、PyTorch 関数から変換された一連の Deep Learning Toolbox 関数をカスタム層に統合します。ソフトウェアは、ネットワーク内のカスタム層の数を最小限に抑えます。
以前のリリースでは、importNetworkFromPyTorch がすべての PyTorch 関数を Deep Learning Toolbox 関数に変換していました。
Deep Learning Toolbox 層には、PyTorch の次の層および関数をインポートできます。
torch.nn.AvgPool1dtorch.nn.LSTMtorch.nn.MaxPool1dtorch.nn.MultiheadAttentiontorch.nn.PReLUtorch.nn.functional.avg_pool1dtorch.nn.functional.max_pool1dtorch.nn.functional.upsample
名前と値の引数 PyTorchInputSizes を指定して、次の PyTorch 層をカスタム層ではなく Deep Learning Toolbox 層としてインポートすることもできます。
torch.clonetorch.nn.Dropouttorch.nn.GELUtorch.nn.LeakyReLUtorch.nn.ReLUtorch.nn.Sigmoidtorch.nn.SiLUtorch.nn.Tanh
Deep Learning Toolbox 層には、次の Hugging Face 層をインポートできます。
transformers.models.bert.modeling_bert.BertAttentiontransformers.models.bert.modeling_bert.RobertaSelfAttentiontransformers.models.distilbert.modeling_distilbert.MultiheadSelfAttention
ネットワーク構成を表現するために networkLayer オブジェクトを使用するネットワークをインポートできます。インポートされたネットワークが networkLayer またはカスタム層オブジェクトのどちらを使用して構成を表現するかを指定するには、PreferredNestingType の名前と値の引数を使用します。詳細については、深層学習のネットワーク構成を参照してください。
Deep Learning Toolbox 層には、PyTorch の次の演算子および層をインポートできます。
torch.clonetorch.nn.AdaptiveAvgPool2dtorch.nn.Dropout2Dtorch.nn.PReLU
カスタム層には、PyTorch の次の演算子、関数、および層をインポートすることもできます。
torch.abstorch.arangetorch.baddbmmtorch.bitwise_nottorch.costorch.cumsumtorch.getorch.remaindertorch.repeat_interleavetorch.sintorch.rsqrttorch.zeros_liketorch.nn.functional.padtorch.nn.functional.gluおよびtorch.nn.GLU
PyTorch 2.0 からトレース済みのネットワークをインポートできます。これまで、importNetworkFromPyTorch は、PyTorch Version 1.10.0 以前を使用して作成されたネットワークのインポートをサポートしていました。
torch.nn.Embedding 層と torch.nn.tanh 層を含む PyTorch ネットワークをインポートできるようになりました。
torch.functional.embedding 関数と torch.functional.tanh 関数を含む PyTorch ネットワークをインポートできるようになりました。
torch.eq 演算子と torch.tensor.masked_fill 演算子を含む PyTorch ネットワークをインポートできるようになりました。
importNetworkFromPyTorch は、重み結束をもつ PyTorch モデルのインポートをサポートします。
importNetworkFromPyTorch は、重み共有をもつ PyTorch モデルのインポートをサポートします。
importNetworkFromPyTorch は、PyTorch ネットワーク入力の次元サイズの指定をサポートします。名前と値の引数 PyTorchInputSizes を使用して入力サイズを指定します。
MATLAB Command
You clicked a link that corresponds to this MATLAB command:
Run the command by entering it in the MATLAB Command Window. Web browsers do not support MATLAB commands.
Web サイトの選択
Web サイトを選択すると、翻訳されたコンテンツにアクセスし、地域のイベントやサービスを確認できます。現在の位置情報に基づき、次のサイトの選択を推奨します:
また、以下のリストから Web サイトを選択することもできます。
最適なサイトパフォーマンスの取得方法
中国のサイト (中国語または英語) を選択することで、最適なサイトパフォーマンスが得られます。その他の国の MathWorks のサイトは、お客様の地域からのアクセスが最適化されていません。
南北アメリカ
- América Latina (Español)
- Canada (English)
- United States (English)
ヨーロッパ
- Belgium (English)
- Denmark (English)
- Deutschland (Deutsch)
- España (Español)
- Finland (English)
- France (Français)
- Ireland (English)
- Italia (Italiano)
- Luxembourg (English)
- Netherlands (English)
- Norway (English)
- Österreich (Deutsch)
- Portugal (English)
- Sweden (English)
- Switzerland
- United Kingdom (English)