checkLayer
カスタム層または関数層の有効性のチェック
説明
checkLayer( は、指定された layer,layout1,...,layoutN)networkDataLayout オブジェクトを使用して層の有効性をチェックします。ここで、N は層入力の数であり、layoutK は入力 layer.InputNames(K) に対応します。 (R2023b 以降)
checkLayer( は、layer,validInputSize)validInputSize のサイズの生成データを使用して、カスタム層または関数層の有効性をチェックします。1 つの入力をもつ層の場合、validInputSize を層に対する入力の典型的なサイズに設定します。複数の入力をもつ層の場合、validInputSize を典型的なサイズの cell 配列に設定します。ここで、各要素は層入力 1 つに対応します。この構文は、nnet.layer.Formattable クラスから継承する層をサポートしません。
checkLayer(___, は、1 つ以上の名前と値の引数を使用して追加オプションを指定します。Name=Value)
例
層入力に flatten 関数を適用する関数層オブジェクトを作成します。flatten 関数は、この例の終わりに定義されており、入力 dlarray の空間次元を折りたたんでチャネルの次元にします。
customFlattenLayer = functionLayer(@(X) flatten(X),Formattable=true)
customFlattenLayer =
FunctionLayer with properties:
Name: ''
PredictFcn: @(X)flatten(X)
Formattable: 1
Acceleratable: 0
Learnable Parameters
No properties.
State Parameters
No properties.
Show all properties
networkDataLayout オブジェクトを使用して、層への入力のサイズと次元を指定します。
layout = networkDataLayout([227 227 3 NaN],"SSCB")layout =
networkDataLayout with properties:
Size: [227 227 3 NaN]
Format: 'SSCB'
checkLayer 関数を使用して、層が有効であることをチェックします。
checkLayer(customFlattenLayer,layout)
Skipping GPU tests. No compatible GPU device found. Skipping code generation compatibility tests. To check validity of the layer for code generation, specify the CheckCodegenCompatibility and ObservationDimension options. Running nnet.checklayer.TestLayerWithoutBackward .......... .......... Done nnet.checklayer.TestLayerWithoutBackward __________ Test Summary: 20 Passed, 0 Failed, 0 Incomplete, 14 Skipped. Time elapsed: 0.25745 seconds.
この場合、関数は層に関する問題を検出していません。
Flatten 関数
flatten 関数は、形式を整えた dlarray を入力として受け取り、入力 dlarray の空間次元を折りたたんでチャネルの次元にします。入力 dlarray には、時間 ("T") または指定なし ("U") の次元を含めてはなりません。
function Y = flatten(X) % Find spatial, channel, and batch dimensions. idxS = finddim(X,"S"); idxC = finddim(X,"C"); idxB = finddim(X,"B"); % Determine size of spatial and channel dimensions. sizeS = size(X,idxS); sizeC = size(X,idxC); if ~isempty(idxB) % If the input has a batch dimension, determine the size of the output % channel dimension. numChannels = sizeC*prod(sizeS,"all"); sizeB = size(X,idxB); % Reshape and format output in "CB" format. X = reshape(X,[numChannels sizeB]); Y = dlarray(X,"CB"); else % If the input does not have a batch dimension, reshape and output in % "CU" format. X = X(:); Y = dlarray(X,"CU"); end end
例のカスタム層 sreluLayer の有効性をチェックします。
この例にサポート ファイルとして添付されているカスタム層 sreluLayer は、入力データに SReLU 演算を適用します。この層にアクセスするには、この例をライブ スクリプトとして開きます。
層のインスタンスを作成します。
layer = sreluLayer;
層への典型的な入力の 1 つの観測値に要求される入力サイズと形式を指定する networkDataLayout オブジェクトを作成します。有効な入力サイズとして [24 24 20 128] を指定します。ここで、各次元は、前の層の出力における高さ、幅、チャネル数、および観測値の数に対応します。データ形式を "SSCB" (空間、空間、チャネル、バッチ) として指定します。
validInputSize = [24 24 20 128];
layout = networkDataLayout(validInputSize,"SSCB");checkLayer を使用して、層の有効性をチェックします。ネットワークにデータを渡す場合、層には 4 次元配列を入力する必要があります。ここで、最初の 3 つの次元は前の層の出力における高さ、幅、およびチャネル数に対応し、4 番目の次元は観測値に対応します。
checkLayer(layer,layout)
Skipping GPU tests. No compatible GPU device found. Skipping code generation compatibility tests. To check validity of the layer for code generation, specify the CheckCodegenCompatibility and ObservationDimension options. Running nnet.checklayer.TestLayerWithoutBackward .......... .......... Done nnet.checklayer.TestLayerWithoutBackward __________ Test Summary: 20 Passed, 0 Failed, 0 Incomplete, 14 Skipped. Time elapsed: 0.076363 seconds.
この結果は、パスしたテスト、失敗したテスト、およびスキップされたテストの数を示しています。GPU がない場合、この関数は対応するテストをスキップします。
入力にソフトサイン演算を適用する関数層オブジェクトを作成します。ソフトサイン演算は、関数 で表されます。
layer = functionLayer(@(X) X./(1 + abs(X)))
layer =
FunctionLayer with properties:
Name: ''
PredictFcn: @(X)X./(1+abs(X))
Formattable: 0
Acceleratable: 0
Learnable Parameters
No properties.
State Parameters
No properties.
Show all properties
checkLayer 関数を使用して、層が有効であることをチェックします。有効な入力サイズとして、層に対する単一の観測値入力の典型的なサイズを設定します。たとえば、単一の入力の場合、層にはサイズが h×w×c の観測値が必要です。ここで、h、w、および c は、それぞれ前の層の出力における高さ、幅、およびチャネル数です。
validInputSize を入力配列の典型的なサイズとして指定します。
validInputSize = [5 5 20]; checkLayer(layer,validInputSize)
Skipping initialization tests. To run initialization tests specify a networkDataLayout object. Skipping multi-observation tests. To enable tests with multiple observations, specify a formatted networkDataLayout as the second argument or specify the ObservationDimension option. For 2-D image data, set ObservationDimension to 4. For 3-D image data, set ObservationDimension to 5. For sequence data, set ObservationDimension to 2. Skipping GPU tests. No compatible GPU device found. Skipping code generation compatibility tests. To check validity of the layer for code generation, specify the CheckCodegenCompatibility and ObservationDimension options. Running nnet.checklayer.TestLayerWithoutBackward .......... .. Done nnet.checklayer.TestLayerWithoutBackward __________ Test Summary: 12 Passed, 0 Failed, 0 Incomplete, 22 Skipped. Time elapsed: 0.12033 seconds.
この結果は、パスしたテスト、失敗したテスト、およびスキップされたテストの数を示しています。ObservationsDimension オプションを指定しない場合、または GPU がない場合、関数は対応するテストをスキップします。
複数の観測値のチェック
複数観測値から成るイメージ入力の場合、層にはサイズが h×w×c×N の観測値の配列が必要です。ここで、h、w、および c はそれぞれ高さ、幅、およびチャネル数であり、N は観測値の数です。
複数の観測値に対して層の有効性をチェックするには、観測値の典型的なサイズを指定し、ObservationDimension オプションを 4 に設定します。
layer = functionLayer(@(X) X./(1 + abs(X))); validInputSize = [5 5 20]; checkLayer(layer,validInputSize,ObservationDimension=4)
Skipping initialization tests. To run initialization tests specify a networkDataLayout object. Skipping GPU tests. No compatible GPU device found. Skipping code generation compatibility tests. To check validity of the layer for code generation, specify the CheckCodegenCompatibility and ObservationDimension options. Running nnet.checklayer.TestLayerWithoutBackward .......... ........ Done nnet.checklayer.TestLayerWithoutBackward __________ Test Summary: 18 Passed, 0 Failed, 0 Incomplete, 16 Skipped. Time elapsed: 0.040378 seconds.
この場合、関数は層に関する問題を検出していません。
カスタム層 codegenSReLULayer について、コード生成の互換性をチェックします。
この例にサポート ファイルとして添付されているカスタム層 codegenSReLULayer は、入力データに SReLU 演算を適用します。この層にアクセスするには、この例をライブ スクリプトとして開きます。
層のインスタンスを作成します。
layer = codegenSReLULayer;
層への典型的な入力に要求される入力サイズと形式を指定する networkDataLayout オブジェクトを作成します。有効な入力サイズとして [24 24 20 128] を指定します。ここで、各次元は、前の層の出力における高さ、幅、チャネル数、および観測値の数に対応します。形式を "SSCB" (空間、空間、チャネル、バッチ) として指定します。
validInputSize = [24 24 20 128];
layout = networkDataLayout(validInputSize,"SSCB");checkLayer を使用して層の有効性をチェックします。コード生成の互換性をチェックするには、CheckCodegenCompatibility オプションを true に設定します。関数 checkLayer は、層がコード生成と互換性のある MATLAB 関数を使用しているかどうかをチェックしません。カスタム層定義がコード生成でサポートされているかどうかをチェックするには、まず "コード生成の準備状態" アプリを使用します。詳細については、コード生成の準備状態ツールの実行 (MATLAB Coder)を参照してください。
checkLayer(layer,layout,CheckCodegenCompatibility=true)
Skipping GPU tests. No compatible GPU device found. Running nnet.checklayer.TestLayerWithoutBackward .......... .......... ..... Done nnet.checklayer.TestLayerWithoutBackward __________ Test Summary: 25 Passed, 0 Failed, 0 Incomplete, 9 Skipped. Time elapsed: 0.84524 seconds.
この関数によって層に関する問題は検出されていません。
入力引数
チェックする層。nnet.layer.Layer オブジェクトまたは FunctionLayer オブジェクトとして指定します。
layer を評価する前に初期化が必要な学習可能なパラメーターまたは状態パラメーターが層にある場合、または層にカスタム initialize 関数がある場合は、layout を指定するか、層を初期化しなければなりません。
独自のカスタム層を定義する方法の例については、学習可能なパラメーターを含むカスタム深層学習層の定義を参照してください。指定した関数を適用する層を作成するには、functionLayer を使用します。
R2023b 以降
層への各入力に対する有効なネットワーク データ レイアウト。networkDataLayout オブジェクトとして指定します。
1 つの入力をもつ層の場合は、1 つの
layoutを指定します。複数の入力をもつ層の場合は、各入力に対して
layoutを指定します。たとえば、2 つの入力をもつ層の場合は、layout1,layout2を指定します。ここで、layout1は最初の入力の有効なネットワーク データ レイアウトに対応し、layout2は 2 番目の入力の有効なネットワーク データ レイアウトに対応します。
層を nnet.layer.Formattable クラスから継承する場合は、層への各入力について networkDataLayout を指定しなければなりません。
入力サイズが大きい場合、勾配チェックの実行に時間がかかります。チェックを高速化するには、Size プロパティを使用して、より小さいサイズのネットワーク データ レイアウトを指定します。
層の有効な入力サイズ。正の整数のベクトルとして指定するか、正の整数のベクトルの cell 配列として指定します。
1 つの入力をもつ層の場合は、
validInputSizeを入力データの次元に対応する整数のベクトルとして指定します。たとえば、[5 5 10]は、サイズが 5×5×10 の有効な入力データに対応します。複数の入力をもつ層の場合は、
validInputSizeをベクトルの cell 配列として指定します。各ベクトルは層入力に対応し、ベクトルの要素は対応する入力データの次元に対応します。たとえば、{[24 24 20],[24 24 10]}は 2 つの入力の有効な入力サイズに対応します。ここで、24×24×20 は最初の入力の有効な入力サイズであり、24×24×10 は 2 番目の入力の有効な入力サイズです。
詳細については、層入力サイズを参照してください。
入力サイズが大きい場合、勾配チェックの実行に時間がかかります。チェックを高速化するには、指定する有効な入力サイズを小さくします。
例: [5 5 10]
例: {[24 24 20],[24 24 10]}
データ型: single | double | int8 | int16 | int32 | int64 | uint8 | uint16 | uint32 | uint64 | cell
名前と値の引数
オプションの引数のペアを Name1=Value1,...,NameN=ValueN として指定します。ここで、Name は引数名で、Value は対応する値です。名前と値の引数は他の引数の後に指定しなければなりませんが、ペアの順序は重要ではありません。
例: ObservationDimension=4 は観測次元を 4 に設定します。
観測次元。正の整数または正の整数の行ベクトルとして指定します。既定は、ネットワーク データ レイアウト layout1,...,layoutN のバッチ ("B") 次元の位置です。
観測次元は、層入力データのどの次元が観測値に対応するかを指定します。たとえば、層が想定する入力データのサイズが h×w×c×N である場合 (ここで、h、w、c はそれぞれ入力データの高さ、幅、チャネル数に対応し、N は観測値の数に対応する)、観測次元は 4 になります。詳細については、層入力サイズを参照してください。
バッチ次元をもつようにネットワーク データ レイアウトを指定した場合、または観測次元を指定した場合、checkLayer 関数は、サイズ 1 および 2 のミニバッチで生成されたデータを使用して、層関数が有効であることをチェックします。そうでない場合、関数は対応するテストをスキップします。
例: 4
例: [4 4 2]
データ型: single | double | int8 | int16 | int32 | int64 | uint8 | uint16 | uint32 | uint64
コード生成テストを有効にするフラグ。0 (false) または 1 (true) として指定します。
CheckCodegenCompatibility が 1 (true) の場合、Format プロパティにバッチ ("B") 次元を含む layout を指定するか、ObservationDimension オプションを指定しなければなりません。
CheckCodegenCompatibility オプションでは、nnet.layer.Formattable から継承された層はサポートされません。代わりに、analyzeNetworkForCodegen (MATLAB Coder) 関数を使用してください。
さらに、サードパーティのライブラリを使用するコードを生成する場合は、次の点に注意してください。
コード生成では、2 次元イメージ入力または特徴入力のみをもつカスタム層がサポートされます。
層の順方向関数の入力と出力は、同じバッチ サイズでなければなりません。
非スカラーのプロパティは、single、double、または文字配列でなければなりません。
スカラーのプロパティは、数値型、logical 型、または string 型でなければなりません。
関数 checkLayer は、層で使用されている関数がコード生成と互換性があるかどうかをチェックしません。カスタム層で使用されている関数もコード生成をサポートしているかどうかをチェックするには、まずコード生成の準備状態アプリを使用します。詳細については、コード生成の準備状態ツールの実行 (MATLAB Coder)を参照してください。
コード生成をサポートするカスタム層を定義する方法を示す例については、コード生成用のカスタム深層学習層の定義を参照してください。
データ型: logical
詳細
各層では、有効なネットワーク データ レイアウトは前の層の出力によって異なります。
| 層入力 | 例 | |
|---|---|---|
| 形状 | データ形式 | |
| 2 次元イメージ | h×w×c×N の数値配列。ここで、h、w、c、および N は、それぞれイメージの高さ、幅、チャネル数、および観測値の数です。 | "SSCB" |
| 3 次元イメージ | h×w×d×c×N の数値配列。ここで、h、w、d、c、および N は、それぞれイメージの高さ、幅、深さ、チャネル数、およびイメージの観測値の数です。 | "SSSCB" |
| ベクトル シーケンス | c×N×s の行列。ここで、c はシーケンスの特徴の数、N はシーケンスの観測値の数、s はシーケンス長です。 | "CBT" |
| 2 次元イメージ シーケンス | h×w×c×N×s の配列。ここで、h、w、および c はそれぞれイメージの高さ、幅、およびチャネル数に対応し、N はイメージ シーケンスの観測値の数、s はシーケンス長です。 | "SSCBT" |
| 3 次元イメージ シーケンス | h×w×d×c×N×s の配列。ここで、h、w、d、および c はそれぞれイメージの高さ、幅、深さ、チャネル数に対応し、N はイメージ シーケンスの観測値の数、s はシーケンスの長さです。 | "SSSCBT" |
| 特徴 | c 行 N 列の配列。ここで、c は特徴の数、N は観測値の数です。 | "CB" |
たとえば、2 次元イメージ分類問題の場合、サイズを [h w c n]、形式を "SSCB" として指定する networkDataLayout オブジェクトを作成します。ここで、h、w、c はそれぞれイメージの高さ、幅、チャネル数に対応し、n は観測値の数に対応します。
コード生成では、2 次元イメージ入力のみをもつ層がサポートされます。
アルゴリズム
関数 checkLayer は、以下のテストを使用してカスタム層の有効性をチェックします。
| テスト | 説明 |
|---|---|
functionSyntaxesAreCorrect | 層関数の構文が正しく定義されています。 |
predictDoesNotError | 関数 predict でエラーが発生しません。 |
forwardDoesNotError | 指定されている場合、関数 |
forwardPredictAreConsistentInSize |
|
backwardDoesNotError | 指定されている場合、backward でエラーが発生しません。 |
backwardIsConsistentInSize |
|
predictIsConsistentInType |
|
forwardIsConsistentInType |
|
backwardIsConsistentInType |
|
gradientsAreNumericallyCorrect | backward が指定されている場合、backward で計算された勾配が数値勾配と整合します。 |
backwardPropagationDoesNotError | backward が指定されていない場合、自動微分を使用して微分を計算できます。 |
predictReturnsValidStates | 状態プロパティをもつ層において、関数 predict が有効な状態を返します。 |
forwardReturnsValidStates | 状態プロパティをもつ層において、関数 forward (指定されている場合) が有効な状態を返します。 |
resetStateDoesNotError | 状態プロパティをもつ層において、関数 resetState (指定されている場合) はエラーを発生させずに状態を有効な状態にリセットします。 |
| nnet.layer.Formattable クラスから継承する層の場合、関数 predict はチャネル次元をもち、形式を整えた dlarray を返します。 |
| nnet.layer.Formattable クラスから継承する層の場合、関数 forward (指定されている場合) はチャネル次元をもち、形式を整えた dlarray を返します。 |
| 1 つ以上の networkDataLayout オブジェクトを指定する場合、同じ networkDataLayout オブジェクトを入力として初期化を繰り返しても、層の学習可能なパラメーターが変化することはありません。 |
| 1 つ以上の networkDataLayout オブジェクトを指定する場合、同じ networkDataLayout オブジェクトを入力として初期化を繰り返しても、層の状態パラメーターが変化することはありません。 |
codegenPragmaDefinedInClassDef | コード生成のプラグマ "%#codegen" は、クラス ファイルで指定されます。 |
layerPropertiesSupportCodegen | 層のプロパティによってコード生成がサポートされます。 |
predictSupportsCodegen | predict はコード生成に対して有効です。 |
doesNotHaveStateProperties | コード生成において、層が状態プロパティをもちません。 |
functionLayerSupportsCodegen | コード生成では、層関数はパス上の名前付き関数でなければならず、Formattable プロパティを 0 (false) に設定しなければなりません。 |
テストによっては複数回実行されます。これらのテストでは、各種のデータ型と GPU の互換性もチェックされます。
predictIsConsistentInTypeforwardIsConsistentInTypebackwardIsConsistentInType
層関数を GPU で実行するには、これらの関数が、基となるデータ型が single である gpuArray 型の入力と出力をサポートしていなければなりません。
checkLayer で使用されるテストの詳細については、カスタム層の有効性のチェックを参照してください。
バージョン履歴
R2018a で導入カスタム出力層は推奨されません。代わりに、trainnet 関数でカスタム損失関数を使用します。
この推奨により、次の構文もカスタム出力層入力に対して非推奨となります。
checkLayer(layer,layout1,...,layoutN)checkLayer(layer,validInputSize)checkLayer(___,Name=Value)
カスタム出力層のサポートを削除する予定はありません。ただし、関数 trainnet には次の利点があるため、代わりにこの関数を使うことを推奨します。
trainnetはdlnetworkオブジェクトをサポートしています。このオブジェクトは、ユーザーが作成したり外部のプラットフォームからインポートしたりできる、さまざまなネットワーク アーキテクチャをサポートしています。trainnetを使用すると、損失関数を簡単に指定できます。組み込みの損失関数を選択するか、カスタム損失関数を指定できます。trainnetはdlnetworkオブジェクトを出力します。このオブジェクトは、ネットワークの構築、予測、組み込み学習、可視化、圧縮、検証、およびカスタム学習ループをサポートする統合されたデータ型です。trainnetは、通常、trainNetworkよりも高速です。
trainNetwork 関数とカスタム出力層を組み合わせた代表的な使用方法と、代わりに trainnet 関数を使用するためのコードの更新方法を次の表に示します。
| 非推奨 | 推奨 |
|---|---|
net = trainNetwork(X,T,layers,options)。layers にはカスタム出力層が含まれています。 | net = trainnet(X,T,layers,lossFcn,options); layers はカスタム出力層のない同じネットワークを指定し、lossFcn はカスタム損失関数を指定する関数ハンドルです。 |
net = trainNetwork(data,layers,options)。layers にはカスタム出力層が含まれています。 | net = trainnet(data,layers,lossFcn,options); layers はカスタム出力層のない同じネットワークを指定し、lossFcn はカスタム損失関数を指定する関数ハンドルです。 |
checkLayer 関数を使用して、networkDataLayoutObject を 2 番目の引数として指定することで、nnet.layer.Formattable クラスから継承するカスタム層の有効性をチェックできるようになりました。
また、checkLayer 関数を使用し、2 番目の引数として networkDataLayout を指定して、最初に層を初期化せずに、カスタム初期化関数を使用してカスタム層の有効性をチェックすることもできます。
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)