メインコンテンツ

dlnetwork

深層学習ニューラル ネットワーク

説明

dlnetwork オブジェクトは、深層学習ニューラル ネットワークのアーキテクチャを指定します。

ヒント

ほとんどの深層学習タスクでは、事前学習済みのニューラル ネットワークを使用して独自のデータに適応させることができます。転移学習を使用して、畳み込みニューラル ネットワークの再学習を行い、新しい一連のイメージを分類する方法を示す例については、新しいイメージを分類するためのニューラル ネットワークの再学習を参照してください。または、関数 trainnet と関数 trainingOptions を使用してニューラル ネットワークを作成し、これにゼロから学習させることができます。

タスクに必要な学習オプションが関数 trainingOptions に用意されていない場合、自動微分を使用してカスタム学習ループを作成できます。詳細については、カスタム学習ループを使用したネットワークの学習を参照してください。

タスクに必要な損失関数が関数 trainnet に用意されていない場合、カスタム損失関数を関数ハンドルとして trainnet に指定できます。損失関数が予測とターゲットよりも多くの入力を必要とする場合 (たとえば、損失関数がニューラル ネットワークまたは追加の入力にアクセスする必要がある場合)、カスタム学習ループを使用してモデルに学習させます。詳細については、カスタム学習ループを使用したネットワークの学習を参照してください。

タスクに必要な層が Deep Learning Toolbox™ に用意されていない場合、カスタム層を作成できます。詳細については、カスタム深層学習層の定義を参照してください。層のネットワークとして指定できないモデルの場合は、モデルを関数として定義できます。詳細については、モデル関数を使用したネットワークの学習を参照してください。

どのタスクでどの学習手法を使用するかについての詳細は、MATLAB による深層学習モデルの学習を参照してください。

作成

説明

空のネットワーク

net = dlnetwork は、層がない dlnetwork オブジェクトを作成します。ニューラル ネットワークをゼロから作成するには、この構文を使用します。 (R2024a 以降)

入力層をもつネットワーク

net = dlnetwork(layers) は、指定された層を使用してニューラル ネットワークを作成し、未設定の学習可能なパラメーターと状態パラメーターを初期化します。この構文は、layers の入力層を使用して、ニューラル ネットワークの学習可能なパラメーターと状態パラメーターのサイズと形式を決定します。

layers が、完全な単入力ニューラル ネットワークを定義し、直列に配置された層をもち、入力層をもつ場合、この構文を使用します。

net = dlnetwork(layers,OutputNames=names) は、OutputNames プロパティも設定します。OutputNames プロパティは、ネットワークの出力に対応する層または層出力を指定します。

layers が、完全な単入力多出力ニューラル ネットワークを定義し、直列に配置された層をもち、入力層をもつ場合、この構文を使用します。

net = dlnetwork(layers,Initialize=tf) は、ニューラル ネットワークの学習可能なパラメーターと状態パラメーターを初期化するかどうかを指定します。tf1 (true) の場合、この構文は net = dlnetwork(layers) と等価です。tf0 (false) の場合、この構文は、空のネットワークを作成してから関数 addLayers を使用して layers を追加することと等価です。

未接続の入力をもつネットワーク

net = dlnetwork(layers,X1,...,XN) は、指定された層を使用してニューラル ネットワークを作成し、未設定の学習可能なパラメーターと状態パラメーターを初期化します。この構文は、ネットワークのデータ レイアウト オブジェクト、またはサンプル入力 X1,...,XN を使用して、ニューラル ネットワークの学習可能なパラメーターと状態値のサイズと形式を決定します。ここで、N はネットワーク入力の数です。

layers が、完全なニューラル ネットワークを定義し、直列に配置された層をもち、入力層に接続されていない入力をもつ場合、この構文を使用します。

net = dlnetwork(layers,X1,...,XN,OutputNames=names) は、OutputNames プロパティも設定します。

layers が、完全なニューラル ネットワークを定義し、複数の出力をもち、直列に配置された層をもち、入力層に接続されていない入力をもつ場合、この構文を使用します。

変換

net = dlnetwork(prunableNet) は、枝刈り用に選択されたフィルターを prunableNet の畳み込み層から削除して TaylorPrunableNetworkdlnetwork オブジェクトに変換し、圧縮された (学習可能なパラメーターを減らしてサイズを小さくした) dlnetwork オブジェクトを返します。

net = dlnetwork(mdl) は、Statistics and Machine Learning Toolbox™ の機械学習モデルを dlnetwork オブジェクトに変換します。

入力引数

すべて展開する

ネットワーク層。Layer 配列として指定します。

層は直列に結合されます。

サポートされている層の一覧については、深層学習層の一覧を参照してください。

学習可能なパラメーターと状態パラメーターのサイズと形式を決定するのに使用されるサンプルのネットワーク入力またはデータ レイアウト。それぞれ次のいずれかの値として指定します。

  • 形式を整えた dlarray オブジェクト

  • 形式を整えた networkDataLayout オブジェクト

  • 形式を整えていない dlarray オブジェクト (R2025a 以降)

  • 形式を整えていない networkDataLayout オブジェクト (R2025a 以降)

ソフトウェアは、X1,...XN をネットワーク全体に伝播させて、dlnetwork オブジェクトの学習可能なパラメーターと状態パラメーターの適切なサイズと形式を決定し、未設定の学習可能なパラメーターと状態パラメーターがあれば、それを初期化します。

形式を整えていないデータを受け取るニューラル ネットワークを作成するには、inputLayer オブジェクトを使用し、形式を指定しないでください。 (R2025a 以降)

R2025a より前: X1,...XN は形式を整えた dlarray オブジェクトまたは networkDataLayout オブジェクトでなければなりません。

X1,...,XN の順序は、layers において入力を必要とする層の順序と一致しなければなりません。

メモ

自動的な初期化では、入力データのサイズと形式の情報のみが使用されます。入力データの値に基づいて初期化を行う場合、学習可能なパラメーターを手動で初期化しなければなりません。

学習可能なパラメーターと状態パラメーターを初期化するかどうかのフラグ。次のいずれかの値として指定します。

  • 1 (true) — 学習可能なパラメーターと状態パラメーターを初期化します。ソフトウェアは、layers の入力層を使用して、学習可能なパラメーターと状態パラメーターのサイズを決定します。

  • 0 (false) — 学習可能なパラメーターと状態パラメーターを初期化しません。次の場合にこのオプションを使用します。

    • ニューラル ネットワークをさらに編集する予定がある場合。層および接続の追加または削除を行う予定がある場合など。

    • カスタム層でネットワークを使用し、カスタム初期化関数を使用する場合。

ニューラル ネットワークにおける予測とカスタム学習ループでは、初期化されたネットワークが必要です。初期化されていないネットワークを初期化するには、関数 initialize を使用します。

1 次テイラー近似を使用した枝刈り用のネットワーク。TaylorPrunableNetwork オブジェクトとして指定します。

深層ニューラル ネットワークの枝刈りを行うには、Deep Learning Toolbox Model Compression Library サポート パッケージが必要です。このサポート パッケージは無料のアドオンで、アドオン エクスプローラーを使用してダウンロードできます。または、Deep Learning Toolbox Model Compression Library を参照してください。

R2024b 以降

分類または回帰ニューラル ネットワーク。ClassificationNeuralNetwork (Statistics and Machine Learning Toolbox) オブジェクト、RegressionNeuralNetwork (Statistics and Machine Learning Toolbox) オブジェクト、CompactClassificationNeuralNetwork (Statistics and Machine Learning Toolbox) オブジェクト、または CompactRegressionNeuralNetwork (Statistics and Machine Learning Toolbox) オブジェクトとして指定します。

fitcnet (Statistics and Machine Learning Toolbox) 関数と fitrnet (Statistics and Machine Learning Toolbox) 関数は、それぞれ ClassificationNeuralNetwork オブジェクトと RegressionNeuralNetwork オブジェクトを返します。compact (Statistics and Machine Learning Toolbox) 関数は、CompactClassificationNeuralNetwork オブジェクトと CompactRegressionNeuralNetwork オブジェクトを返します。

空でない Mu プロパティおよび Sigma プロパティをもつモデルの場合、返されるニューラル ネットワークは同等の正規化を実行する入力層をもちます。

categorical 入力をもつモデルの場合、返されるニューラル ネットワークは、one-hot 符号化された categorical データを必要とします。

ヒント

学習、予測、またはテスト中にニューラル ネットワークの categorical 入力を自動的に one-hot 符号化するには、それぞれ trainingOptions 関数、minibatchpredict 関数、および testnet 関数で CategoricalInputEncoding 引数を "one-hot" に設定します。 (R2025a 以降)

R2024b において: onehotencode 関数を使用して、categorical 入力を手動で one-hot 符号化します。

警告

mdlResponseTransform および ScoreTransform プロパティはサポートされていません。ネットワークを使用して予測を行う場合は、出力を手動で変換します。

StandardizeResponses 引数が 1 (true) に設定されたモデルの場合、返される dlnetwork オブジェクトは応答の標準化を解除しません。ニューラル ネットワークに再学習させる場合は、ターゲットを手動で標準化しなければなりません。ニューラル ネットワークを使用して予測を行う場合は、出力の標準化を手動で解除しなければなりません。

プロパティ

すべて展開する

ネットワーク層。Layer 配列として指定します。

層の結合。2 列の table として指定します。

各 table 行はニューラル ネットワーク内の結合を表します。1 列目の Source は、各結合の結合元を指定します。2 列目の Destination は、各結合の結合先を指定します。結合元と結合先は層の名前であるか、"layerName/IOName" の形式を取ります。"IOName" は層の入力または出力の名前です。

データ型: table

ネットワークの学習可能なパラメーター。3 列の table として指定します。

  • Layer — 層の名前。string スカラーとして指定します。

  • Parameter — パラメーター名。string スカラーとして指定します。

  • Value — パラメーターの値。dlarray オブジェクトとして指定します。

ネットワークの学習可能なパラメーターには、畳み込みや全結合層の重みなど、ネットワークが学習する特徴が含まれます。

学習可能なパラメーターの値に複素数値を使用できます (R2024a 以降)

データ型: table

ネットワークの状態。table として指定します。

ネットワークの状態は、次の 3 つの列をもつ table です。

  • Layer – 層の名前。string スカラーとして指定します。

  • Parameter – 状態パラメーターの名前。string スカラーとして指定します。

  • Value – 状態パラメーターの値。dlarray オブジェクトとして指定します。

層の状態には、層の処理中に計算された情報が格納されます。この情報は、層の後続のフォワード パスで使用するために保持されます。たとえば、LSTM 層にはセル状態と隠れ状態が格納され、バッチ正規化層によって実行中の統計が計算されます。

LSTM 層などの再帰層の場合、HasStateInputs プロパティを 1 (true) に設定すると、その層の状態に関するエントリはステート テーブルに格納されません。

学習時または推論時に、関数 forward および関数 predict の出力を使用してネットワークの状態を更新できます。

状態値に複素数値を使用できます (R2024a 以降)

データ型: table

ネットワーク入力の名前。文字ベクトルの cell 配列として指定します。

ネットワーク入力は、入力層および層の未接続入力です。

入力層および 1 つの入力をもつ層の場合、入力の名前は層の名前です。複数の入力をもつ層の場合、入力の名前は "layerName/inputName" です。ここで、layerName は層の名前、inputName は層の入力の名前です。

複数の入力をもつネットワークの場合、学習関数と予測関数はこのプロパティを使用して入力の順序を決定します。たとえば、predict 関数に対するインメモリ入力 X1,...,XM の場合、入力の順序は、ネットワークの InputNames プロパティ内の対応する入力の順序と一致しなければなりません。

順序をカスタマイズするには、InputNames を目的の順序に設定します。 (R2024b 以降)

R2024b より前: このプロパティは読み取り専用です。InputNames で指定した順序と一致する入力引数が含まれるように、predict 関数などを呼び出すコードを調整します。

メモ

InputNames プロパティをカスタマイズした後、そのニューラル ネットワークに対して層の追加や削除などの編集を行っても、InputNames プロパティは変わりません。この動作は、ネットワーク入力に対応する層を追加または削除する場合は InputNames プロパティも手動で更新する必要があることを意味します。

データ型: cell

ネットワーク出力の名前。文字ベクトルの cell 配列として指定します。

1 つの出力をもつ層の場合、出力の名前は層の名前です。複数の出力をもつ層の場合、出力の名前は "layerName/outputName" です。ここで、layerName は層の名前、outputName は層の出力の名前です。

出力名を指定しなかった場合、ネットワークの作成時に、ソフトウェアによって未接続の出力をもつ層に OutputNames プロパティが設定されます。

複数の出力をもつネットワークの場合、学習関数と予測関数はこのプロパティを使用して出力の順序を決定します。たとえば、predict 関数の出力 Y1,...,YN は、ネットワークの OutputNames プロパティによって指定された出力に対応します。

メモ

OutputNames プロパティをカスタマイズした後、そのニューラル ネットワークに対して層の追加や削除などの編集を行っても、OutputNames プロパティは変わりません。この動作は、ネットワーク出力に対応する層を追加または削除する場合は OutputNames プロパティも手動で更新する必要があることを意味します。

データ型: cell

この プロパティ は読み取り専用です。

ネットワークが初期化済みかどうかのフラグ。次のいずれかの値として指定します。

  • 1 (true) — ネットワークは初期化されており、予測およびカスタム学習ループに使用する準備ができています。学習可能なパラメーターまたは状態パラメーターの "値" を変更しても、ネットワークは初期化済みのままになります。

  • 0 (false) — ネットワークは初期化されておらず、予測またはカスタム学習ループに使用する準備ができていません。初期化されていないネットワークを初期化するには、関数 initialize を使用します。

データ型: logical

オブジェクト関数

addInputLayerネットワークに入力層を追加する
addLayersニューラル ネットワークへの層の追加
removeLayersニューラル ネットワークからの層の削除
connectLayersニューラル ネットワークの層の結合
disconnectLayersニューラル ネットワークの層の切り離し
replaceLayerニューラル ネットワークの層の置き換え
getLayer名前またはパスによる層の参照
expandLayersExpand network layers
groupLayersGroup layers into network layers
summaryネットワークの概要の出力
plotニューラル ネットワーク アーキテクチャのプロット
initializeニューラル ネットワークの学習可能なパラメーターと状態パラメーターを初期化する
predict推論用の深層学習ネットワーク出力の計算
forward学習用の深層学習ネットワーク出力の計算
resetStateニューラル ネットワークの状態パラメーターのリセット
setL2Factor層の学習可能なパラメーターの L2 正則化係数の設定
setLearnRateFactor層の学習可能なパラメーターの学習率係数を設定します。
getLearnRateFactor層の学習可能なパラメーターの学習率係数の取得
getL2Factor層の学習可能なパラメーターの L2 正則化係数の取得

すべて折りたたむ

入力として与えられた 2 次元イメージの categorical ラベルと数値を両方予測する 2 出力ニューラル ネットワークを定義します。

クラスと応答の数を指定します。

numClasses = 10;
numResponses = 1;

空のニューラル ネットワークを作成します。

net = dlnetwork;

ネットワークの主分岐の層、およびソフトマックス出力を定義します。

layers = [
    imageInputLayer([28 28 1],Normalization="none")

    convolution2dLayer(5,16,Padding="same")
    batchNormalizationLayer
    reluLayer(Name="relu_1")

    convolution2dLayer(3,32,Padding="same",Stride=2)
    batchNormalizationLayer
    reluLayer
    convolution2dLayer(3,32,Padding="same")
    batchNormalizationLayer
    reluLayer

    additionLayer(2,Name="add")

    fullyConnectedLayer(numClasses)
    softmaxLayer(Name="softmax")];

net = addLayers(net,layers);

スキップ接続を追加します。

layers = [
    convolution2dLayer(1,32,Stride=2,Name="conv_skip")
    batchNormalizationLayer
    reluLayer(Name="relu_skip")];

net = addLayers(net,layers);
net = connectLayers(net,"relu_1","conv_skip");
net = connectLayers(net,"relu_skip","add/in2");

回帰出力用に全結合層を追加します。

layers = fullyConnectedLayer(numResponses,Name="fc_2");
net = addLayers(net,layers);
net = connectLayers(net,"add","fc_2");

ニューラル ネットワークをプロットで表示します。

figure
plot(net)

Figure contains an axes object. The axes object contains an object of type graphplot.

層が、完全な単入力ニューラル ネットワークを定義し、直列に配置された層をもち、入力層をもつ場合、層配列を dlnetwork オブジェクトに直接変換できます。

LSTM ネットワークを層配列として指定します。

layers = [
    sequenceInputLayer(12)
    lstmLayer(100)
    fullyConnectedLayer(9)
    softmaxLayer];

層配列を dlnetwork オブジェクトに変換します。この層配列は、入力層をもち、それ以外の入力をもたないため、ソフトウェアによってニューラル ネットワークが初期化されます。

net = dlnetwork(layers)
net = 
  dlnetwork with properties:

         Layers: [4×1 nnet.cnn.layer.Layer]
    Connections: [3×2 table]
     Learnables: [5×3 table]
          State: [2×3 table]
     InputNames: {'sequenceinput'}
    OutputNames: {'softmax'}
    Initialized: 1

  View summary with summary.

事前学習済みのネットワークを読み込みます。

net = imagePretrainedNetwork;

dlnetwork オブジェクトの Learnables プロパティは、ネットワークの学習可能なパラメーターが格納された table です。この table には、入れ子層のパラメーターが別々の行に含まれています。このテーブル learnables の最初の数行を表示します。

learnables = net.Learnables;
head(learnables)
          Layer           Parameter           Value       
    __________________    _________    ___________________

    "conv1"               "Weights"    {3×3×3×64  dlarray}
    "conv1"               "Bias"       {1×1×64    dlarray}
    "fire2-squeeze1x1"    "Weights"    {1×1×64×16 dlarray}
    "fire2-squeeze1x1"    "Bias"       {1×1×16    dlarray}
    "fire2-expand1x1"     "Weights"    {1×1×16×64 dlarray}
    "fire2-expand1x1"     "Bias"       {1×1×64    dlarray}
    "fire2-expand3x3"     "Weights"    {3×3×16×64 dlarray}
    "fire2-expand3x3"     "Bias"       {1×1×64    dlarray}

ネットワークの学習可能なパラメーターを凍結するには、学習可能なパラメーターをループ処理し、関数 setLearnRateFactor を使用して学習率を 0 に設定します。

factor = 0;

numLearnables = size(learnables,1);
for i = 1:numLearnables
    layerName = learnables.Layer(i);
    parameterName = learnables.Parameter(i);
    
    net = setLearnRateFactor(net,layerName,parameterName,factor);
end

更新された学習率係数を学習時に使用するには、カスタム学習ループの更新関数に dlnetwork オブジェクトを渡さなければなりません。たとえば、次のコマンドを使用します。

[net,velocity] = sgdmupdate(net,gradients,velocity);

拡張機能

すべて展開する

バージョン履歴

R2019b で導入

すべて展開する