importNetworkFromPyTorch
R2026b説明
Add-On Required: この機能には Deep Learning Toolbox Converter for PyTorch Models アドオンが必要です。
は、事前学習済みの 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 の組み込み層を返すことがあります。
例
CIFAR-10 [1] データで学習させた PyTorch モデルをインポートします。このモデルは、以下の Python コードを使用し、PyTorch version 2.8 において、エクスポートされたプログラムというモデル形式で保存されました。
X = torch.rand(1,3,32,32) exported_model = torch.export.export(model, (X,)) torch.export.save(exported_model, "exported_pytorch_model.pt2")
詳細については、学習済みの PyTorch モデルのエクスポートと保存を参照してください。
modelfile = "exported_pytorch_model.pt2";
net = importNetworkFromPyTorch(modelfile)Importing the model, this may take a few minutes...
net =
dlnetwork with properties:
Layers: [9×1 nnet.cnn.layer.Layer]
Connections: [11×2 table]
Learnables: [86×3 table]
State: [42×3 table]
InputNames: {'InputLayer1'}
OutputNames: {'ResidualNetSmall:fc'}
Initialized: 1
View summary with summary.
インポート後にネットワークを変更する場合、ResidualNetSmall:fc 層への入力は PyTorch ネットワークと同じ順序である必要があります。たとえば、元の PyTorch ネットワークの線形層への入力が 1 行 64 列だった場合、ResidualNetSmall:fc 層への入力も 1 行 64 列である必要があります。
次に、インポートされたネットワーク層を分析します。
analyzeNetwork(net)

インポートされたネットワークは、組み込みの MATLAB 層とカスタム層で構成されています。
[1] Krizhevsky, Alex. "Learning multiple layers of features from tiny images." (2009). https://www.cs.toronto.edu/~kriz/learning-features-2009-TR.pdf
CIFAR-10 [1] データ セットで学習させた PyTorch モデルをインポートします。このモデルは、PyTorch version 2.8 において、エクスポートされたプログラムというモデル形式で保存されました。
詳細については、学習済みの PyTorch モデルのエクスポートと保存を参照してください。
modelfile = "exported_pytorch_model.pt2";
net = importNetworkFromPyTorch(modelfile)Importing the model, this may take a few minutes...
net =
dlnetwork with properties:
Layers: [9×1 nnet.cnn.layer.Layer]
Connections: [11×2 table]
Learnables: [86×3 table]
State: [42×3 table]
InputNames: {'InputLayer1'}
OutputNames: {'ResidualNetSmall:fc'}
Initialized: 1
View summary with summary.
この関数は、dlnetwork オブジェクトとしてモデルをインポートします。
CIFAR-10 データ セットをダウンロードします。このデータ セットには 60,000 個のイメージが格納されています。各イメージのサイズは 32×32 ピクセルで 3 つのカラー チャネル (RGB) があります。データ セットのサイズは 175 MB です。インターネット接続の速度によっては、ダウンロード プロセスに時間がかかることがあります。
datadir = tempdir; downloadCIFARData(datadir);
CIFAR-10 テスト イメージを 4 次元配列として読み込みます。テスト セットには 10,000 個のイメージが格納されています。CIFAR-10 テスト イメージをネットワークの検証用に使用します。
[~,~,XValidation,TValidation] = loadCIFARData(datadir);
テスト データから抽出したイメージとラベルを表示します。
idx=1;
Im = XValidation(:,:,:,idx);
imshow(Im)
title("Label: "+string(TValidation(idx)))
イメージをdlarrayオブジェクトに変換します。"SSCB" (空間、空間、チャネル、バッチ) の次元でイメージの形式を整えます。
Im_dlarray = dlarray(single(Im),"SSCB");イメージを分類し、予測されたラベルを見つけます。
prob = predict(net,Im_dlarray);
predLabel = scores2label(prob,categories(TValidation));
disp("The predicted label is "+string(predLabel))The predicted label is cat
[1] Krizhevsky, Alex. "Learning multiple layers of features from tiny images." (2009). https://www.cs.toronto.edu/~kriz/learning-features-2009-TR.pdf
名前と値の引数 PyTorchInputSizes を使用して、事前学習済みかつトレース済みの PyTorch モデルを初期化された dlnetwork オブジェクトとしてインポートします。詳細な手順については、学習済みの PyTorch モデルのトレースと保存を参照してください。
この例では、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])
Importing the model, this may take a few minutes...
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: {'MNASNet:classifier'}
Initialized: 1
View summary with summary.
ネットワークは予測に使用する準備ができています。
入力引数
PyTorch モデル ファイルの名前。文字ベクトルまたは string スカラーとして指定します。modelfile は現在のフォルダー内にあるか、ファイルへの絶対パスまたは相対パスが含まれていなければなりません。PyTorch モデルは事前学習されていなければならず、かつ次のいずれかである必要があります。
1 回の推論反復にわたってトレースされていること。PyTorch モデルをトレースする方法については、学習済みの PyTorch モデルのトレースと保存を参照してください。
PyTorch version
2.8でtorch.export.export()を使用してエクスポートされていること。PyTorch モデルをエクスポートする方法については、学習済みの PyTorch モデルのエクスポートと保存を参照してください。 (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
R2026b 以降
自動生成されたカスタム層のコーダー ファイルを生成するフラグ。数値または logical の 1(true) または 0(false) として指定します。値が true の場合、importNetworkFromPyTorch は Namespace で示されるカスタム層名前空間内に + 名前空間を生成します。coder+ 名前空間には、汎用 C/C++ コード生成に使用される MATLAB Coder™ 互換のカスタム層と演算子用のファイルが含まれています。生成された名前空間ファイルには、スタブ実装が組み込まれたプレースホルダー関数があります。カスタム層の coderNamespace ファイルと + 名前空間ファイルの両方において、完全な実装を提供しなければなりません。コード生成を行わない場合は、PyTorch ネットワークのインポートを高速化するために、値を coderfalse に指定してコーダー ファイルの生成を無効にしてください。
自動生成されたカスタム層としてインポートされた層がネットワークにない場合、コーダー ファイルは生成されません。
インポートした dlnetwork に networkLayer オブジェクトが含まれている場合、コード生成のために MAT ファイルに保存する前に、dlnetwork に対して expandLayers を呼び出す必要があります。
コード生成の詳細については、深層学習ネットワーク向けの汎用 C/C++ コードの生成 (MATLAB Coder)を参照してください。
例: GenerateCoderFiles=false
データ型: logical
R2026b 以降
入力データ形式。文字ベクトル、string スカラー、または string 配列として指定します。インポーターは、MATLAB と PyTorch との間でデータの順列を解釈するために形式を使用します。importNetworkFromPyTorch がモデルから入力データ形式を判別できない場合、この名前と値の引数を使用します。
空のデータ形式 ("") を指定した場合、importNetworkFromPyTorch は入力データ形式を自動的に解釈します。
値は、表に記載されている書式文字列のいずれか、または空文字列 ("") でなければなりません。
| 形式タイプ | PyTorch | MATLAB | 順列 |
|---|---|---|---|
| 2 次元イメージ | BCSS / CSS | SSCB / SSC | [3 4 2 1] / [2 3 1] |
| 3 次元イメージ | BCSSS / CSSS | SSSCB / SSSC | [3 4 5 2 1] / [2 3 4 1] |
| シーケンス | BCT / TBC / BTC / TC / CT | CBT / CT | [2 1 3] / [3 2 1] / [3 1 2] / [1 2] / [2 1] |
| 特徴 | BC | CB | [2 1] |
指定されたデータ形式が、モデル内の演算から伝播される形式情報と競合する場合、関数はエラーを返します。
例: PyTorchInputDataFormats="BCSS"
例: PyTorchInputDataFormats=["BCSS","","BC"]
データ型: char | string
R2026b 以降
出力データ形式。文字ベクトル、string スカラー、または string 配列として指定します。インポーターは、MATLAB と PyTorch との間でデータの順列を解釈するために形式を使用します。importNetworkFromPyTorch がモデルから出力データ形式を判別できない場合、この名前と値の引数を使用します。
空のデータ形式 ("") を指定した場合、importNetworkFromPyTorch は出力データ形式を自動的に解釈します。
値は、表に記載されている書式文字列のいずれか、または空文字列 ("") でなければなりません。
| 形式タイプ | PyTorch | MATLAB | 順列 |
|---|---|---|---|
| 2 次元イメージ | BCSS / CSS | SSCB / SSC | [3 4 2 1] / [2 3 1] |
| 3 次元イメージ | BCSSS / CSSS | SSSCB / SSSC | [3 4 5 2 1] / [2 3 4 1] |
| シーケンス | BCT / TBC / BTC / TC / CT | CBT / CT | [2 1 3] / [3 2 1] / [3 1 2] / [1 2] / [2 1] |
| 特徴 | BC | CB | [2 1] |
指定されたデータ形式が、モデル内の演算から伝播される形式情報と競合する場合、関数はエラーを返します。
例: PyTorchOutputDataFormats="BC"
例: PyTorchOutputDataFormats=["BCSS","","BC"]
データ型: char | string
出力引数
事前学習済みの PyTorch ネットワーク。dlnetwork オブジェクトとして返されます。
addInputLayer関数を使用せずにネットワークの入力層を編集する場合は、ネットワークのInputNamesプロパティを更新しなければなりません。出力層を編集する場合はOutputNamesを更新しなければなりません。ネットワークが初期化されていない場合は、使用する前に入力層を追加するか、ネットワークを初期化しなければなりません。例については、エクスポートされた PyTorch ネットワークのインポートとトレースされた PyTorch ネットワークのインポートを参照してください。
制限
importNetworkFromPyTorch関数は、PyTorch version 2.8 で作成されたエクスポート済みネットワークをサポートします。この関数は、他のバージョンの PyTorch で作成されたトレース済みネットワークをサポートできる場合があります。動的な形状でエクスポートされた
ExportedProgram形式のモデルのインポートはサポートされていません。コード生成では、インポートしたネットワークに
networkLayerオブジェクトが含まれている場合、コード生成のために保存する前に、expandLayersを使用してネットワークを展開しなければなりません。
詳細
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')
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')
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 | TransposedConvolution1DLayer | pyConvolution |
torch.nn.ConvTranspose2d | TransposedConvolution2DLayer | pyConvolution |
torch.nn.ConvTranspose3d | TransposedConvolution3DLayer | pyConvolution |
torch.nn.Dropout | dropoutLayer | pyDropout |
torch.nn.Dropout2d | spatialDropoutLayer | pyFeatureDropout |
torch.nn.ELU | | pyElu |
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.Hardtanh | clippedReluLayer (min_val=0 でインポートされている場合) | 適用不可 |
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.ReflectionPad1d | 適用不可 | pyPad |
torch.nn.ReflectionPad2d | 適用不可 | pyPad |
torch.nn.ReflectionPad3d | 適用不可 | pyPad |
torch.nn.ReLU | reluLayer | relu |
torch.nn.ReLU6 | clippedReluLayer | pyReLU6 |
torch.nn.ReplicationPad1d | 適用不可 | pyPad |
torch.nn.ReplicationPad2d | 適用不可 | pyPad |
torch.nn.ReplicationPad3d | 適用不可 | pyPad |
torch.nn.SiLU | swishLayer | pySilu |
torch.nn.Sigmoid | sigmoidLayer | pySigmoid |
torch.nn.Softmax | 次元がチャネルに対応することをインポーターが検出した場合は softmaxLayer、そうでない場合は 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.elu | | pyElu |
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.scaled_dot_product_attention |
| pySDPA |
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.acos | pyAcos | 適用不可 |
torch.acosh | pyAcosh | 適用不可 |
torch.add | additionLayer | pyElementwiseBinary |
torch.addmm | pyBaddbmm | 適用不可 |
torch.amax | pyAmax | 適用不可 |
torch.amin | pyAmin | 適用不可 |
torch.any | pyAny | 適用不可 |
torch.arange | pyArange | 適用不可 |
torch.argmax | pyArgmax | 適用不可 |
torch.argmin | pyArgmin | 適用不可 |
torch.as_strided | pyAsStrided | 適用不可 |
torch.asin | pyAsin | 適用不可 |
torch.asinh | pyAsinh | 適用不可 |
torch.atan | pyAtan | 適用不可 |
torch.atan2 | pyAtan2 | 適用不可 |
torch.atanh | pyAtanh | 適用不可 |
torch.baddbmm | pyBaddbmm | 適用不可 |
torch.bitwise_and | pyBitwiseAnd | 適用不可 |
torch.bitwise_not | pyBitwiseNot | 適用不可 |
torch.bitwise_or | pyBitwiseOr | 適用不可 |
torch.bitwise_xor | pyBitwiseXor | 適用不可 |
torch.bmm | pyMatMul | 適用不可 |
torch.cat | concatenationLayer | pyConcat |
torch.ceil | pyCeil | 適用不可 |
torch.chunk | pyChunk | 適用不可 |
torch.clamp | pyClamp | 適用不可 |
torch.clamp_min | pyClampMin | 適用不可 |
torch.clone | | pyIdentity |
torch.concat | pyConcat | 適用不可 |
torch.cos | pyCos | 適用不可 |
torch.cosh | pyCosh | 適用不可 |
torch.cumsum | pyCumsum | 適用不可 |
torch.detach | pyDetach | 適用不可 |
torch.eq | pyExp | 適用不可 |
torch.erf | pyErf | 適用不可 |
torch.exp | pyEq | 適用不可 |
torch.expm1 | pyExpm1 | 適用不可 |
torch.flatten | nnet.pytorch.layer.Flatten2DLayer | pyFlatten |
torch.flip | pyFlip | 適用不可 |
torch.floor | pyFloor | 適用不可 |
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.isinf | pyIsinf | 適用不可 |
torch.isnan | pyIsnan | 適用不可 |
torch.le | pyLe | 適用不可 |
torch.lt | pyLt | 適用不可 |
torch.log | pyLog | 適用不可 |
torch.log10 | pyLog10 | 適用不可 |
torch.log1p | pyLog1p | 適用不可 |
torch.log2 | pyLog2 | 適用不可 |
torch.logical_and | pyLogicalAnd | 適用不可 |
torch.logical_not | pyLogicalNot | 適用不可 |
torch.logical_or | pyLogicalOr | 適用不可 |
torch.logical_xor | pyLogicalXor | 適用不可 |
torch.matmul | pyMatMul | 適用不可 |
torch.max | pyMaxBinary/pyMaxUnary | 適用不可 |
torch.mean | pyMean |
|
torch.min | pyMinUnary | 適用不可 |
torch.minimum | pyMinBinary | 適用不可 |
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 または identityLayer (ラベル付き dlarray として表現されており、PyTorch と MATLAB で入力と出力の次元の順序が同じである場合)。 | pyPermute |
torch.pow | pyElementwiseBinary | 適用不可 |
torch.prod | pyProd | 適用不可 |
torch.rand | pyRand | 適用不可 |
torch.randn | pyRandn | 適用不可 |
torch.randperm | pyRandperm | 適用不可 |
torch.reciprocal | pyReciprocal | 適用不可 |
torch.remainder | pyRemainder | 適用不可 |
torch.repeat | pyRepeat | 適用不可 |
torch.repeat_interleave | pyRepeatInterleave | 適用不可 |
torch.reshape | permuteLayer および reshapeLayer | pyView |
torch.roll | pyRoll | 適用不可 |
torch.round | pyRound | 適用不可 |
torch.rsqrt | pyRsqrt | 適用不可 |
torch.scalar_tensor | pyScalarTensor | 適用不可 |
torch.select | pySlice | 適用不可 |
torch.sign | pySign | 適用不可 |
torch.size | pySize | 適用不可 |
torch.sin | pySin | 適用不可 |
torch.sinh | pySinh | 適用不可 |
torch.slice_scatter | pySliceScatter | 適用不可 |
torch.sort | pySort | 適用不可 |
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 または identityLayer (ラベル付き dlarray として表現されており、PyTorch と MATLAB で入力と出力の次元の順序が同じである場合)。 | 適用不可 |
torch.tan | pyTan | 適用不可 |
torch.tanh | tanhLayer | tanh |
torch.to | pyTo | 適用不可 |
torch.topk | pyTopK | 適用不可 |
torch.transpose | pyTranspose または identityLayer (ラベル付き dlarray として表現されており、PyTorch と MATLAB で入力と出力の次元の順序が同じである場合)。 | 適用不可 |
torch.trunc | pyTrunc | 適用不可 |
torch.unsqueeze | pyUnsqueeze | 適用不可 |
torch.var | pyVar | 適用不可 |
torch.zeros | pyZeros | 適用不可 |
torch.zeros_like | pyZerosLike | 適用不可 |
torch.linalg.vector_norm | pyNorm | 適用不可 |
インデックス (例: X[:,1]) | pySlice | 適用不可 |
torch.tensor.contiguous | | pyIdentity |
torch.tensor.copy_ | pyCopy | 適用不可 |
torch.tensor.expand | pyExpand | 適用不可 |
torch.tensor.expand_as | pyExpandAs | 適用不可 |
torch.tensor.Int | pyInt | 適用不可 |
torch.tensor.masked_fill | pyMaskedFill | 適用不可 |
torch.tensor.masked_scatter | pyMaskedFill | 適用不可 |
torch.tensor.resize_ | pyResize | 適用不可 |
torch.tensor.select | pySlice | 適用不可 |
torch.tensor.view | permuteLayer および reshapeLayer | pyView |
MATLAB Coder ソフトウェアまたは GPU Coder™ ソフトウェアを Deep Learning Toolbox ソフトウェアと共に使用して、インポートされたネットワーク用の MEX コード、スタンドアロン CPU コード、CUDA® MEX コード、またはスタンドアロン CUDA コードを生成できます。詳細については、コード生成と深層ニューラル ネットワークの展開を参照してください。
MATLAB Coder を Deep Learning Toolbox と共に使用して、デスクトップまたは組み込みターゲットで実行される MEX コードまたはスタンドアロン CPU コードを生成します。Intel® Math Kernel Library for Deep Neural Networks (MKL-DNN) または ARM® Compute ライブラリを使用する、生成済みのスタンドアロン コードを展開できます。あるいは、サードパーティ ライブラリの関数を呼び出さない汎用の C/C++ コードを生成することもできます。詳細については、MATLAB Coder を使用した深層学習 (MATLAB Coder)を参照してください。
GPU Coder を Deep Learning Toolbox と共に使用して、デスクトップまたは組み込みターゲットで実行される CUDA MEX コードまたはスタンドアロン CUDA コードを生成します。CUDA 深層ニューラル ネットワーク ライブラリ (cuDNN)、TensorRT™ 高性能推論ライブラリ、または Mali GPU 向け ARM Compute ライブラリを使用する生成済みのスタンドアロン CUDA コードを展開できます。詳細については、GPU Coder を使用した深層学習 (GPU Coder)を参照してください。
importNetworkFromPyTorch は、ネットワーク net を dlnetwork オブジェクトとして返します。このオブジェクトはコード生成をサポートします。Deep Learning Toolbox オブジェクト用の MATLAB Coder および GPU Coder サポートの詳細については、サポートされているクラス (MATLAB Coder)およびサポートされているクラス (GPU Coder)をそれぞれ参照してください。
コード生成をサポートする層をもつあらゆるインポート済みネットワーク用にコードを生成できます。各組み込み MATLAB 層のコード生成機能と制限の詳細については、各層の「拡張機能」のセクションを参照してください。例については、imageInputLayer のコード生成とGPU コード生成を参照してください。
インポートした dlnetwork に networkLayer オブジェクトが含まれている場合、コード生成のために MAT ファイルに保存する前に、dlnetwork に対して expandLayers を呼び出す必要があります。
ヒント
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は、生成されたカスタム層および関連する関数を+名前空間に保存します。Namespace関数は、プレースホルダー関数を含むカスタム層として PyTorch 層をインポートします。プレースホルダー関数は、ネットワークを使用する前に補完しなければなりません。プレースホルダー関数を参照してください。
最初の 3 つのケースでは、インポートされたネットワークは初期化後に予測の準備が整います。
代替機能
アプリ
ディープ ネットワーク デザイナーアプリを使用して、外部プラットフォームからネットワークをインポートすることもできます。アプリは importNetworkFromPyTorch 関数を使用してネットワークをインポートし、進行状況ダイアログ ボックスを表示します。インポート プロセス中に、アプリはネットワークに入力層を追加し (可能な場合)、注意が必要な問題の詳細を含むインポート レポートを表示します。ネットワークをインポートした後、ネットワークを対話的に編集、可視化、および解析できます。ネットワークの編集が完了したら、それを Simulink® にエクスポートするか、ネットワークを構築するための MATLAB コードを生成できます。
ブロック
PyTorch Model Predict ブロックを使用して PyTorch ネットワークを扱うこともできます。このブロックを使用すると、Python 関数を読み込んでデータを前処理および後処理したり、入力端子と出力端子を対話的に構成したりすることもできます。
バージョン履歴
R2022b で導入自動生成されたカスタム層の汎用 C/C++ コード生成で使用される MATLAB Coder 互換ファイルを生成できます。名前と値の引数 GenerateCoderFiles に true を指定すると、既定で MATLAB Coder ファイルが生成されます。
インポーターがモデルから形式を判別できない場合にデータ形式の情報を提供するには、名前と値の引数 PyTorchInputDataFormats および PyTorchOutputDataFormats を指定します。
importNetworkFromPyTorch 関数が、追加の PyTorch 演算子、層、および関数を、Deep Learning Toolbox の組み込みの層および関数としてインポートすることをサポートするようになりました。サポートされている PyTorch の層、関数、および演算子の完全なリストについては、PyTorch の層および関数から MATLAB の組み込みの層および関数への変換を参照してください。
ExportedProgram モデルをインポートする際、importNetworkFromPyTorch はサポートされていない演算子を、サポートされている演算子から成る同等の組み合わせに自動的に分解できるようになりました。これにより、手動で入力する必要のあるプレースホルダー関数の数を削減することができます。
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)