instanceNormalizationLayer
説明
インスタンス正規化層は、各チャネル全体におけるデータのミニバッチの正規化を、各観測値について個別に行います。畳み込みニューラル ネットワークの学習の収束性能を上げ、ネットワークのハイパーパラメーターに対する感度を下げるには、畳み込み層の間にあるインスタンス正規化層と、ReLU 層などの非線形性を使用します。
正規化後、この層は、学習可能なスケール係数 γ だけ入力をスケーリングし、それを学習可能なオフセット β だけシフトします。
作成
説明
layer = instanceNormalizationLayer
は、インスタンス正規化層を作成します。
layer = instanceNormalizationLayer(Name,Value)
は、インスタンス正規化層を作成し、1 つ以上の名前と値のペアの引数を使用してオプションの Epsilon
、パラメーターと初期化、学習率および正則化、および Name
プロパティを設定します。複数の名前と値の引数を指定できます。各プロパティ名を引用符で囲みます。
例: instanceNormalizationLayer('Name','instancenorm')
は、'instancenorm'
という名前のインスタンス正規化層を作成します。
プロパティ
インスタンス正規化
Epsilon
— ミニバッチの分散に加算する定数
1e-5
(既定値) | 正のスカラー
ミニバッチの分散に加算する定数。正のスカラーとして指定します。
ソフトウェアは、正規化の前にミニバッチの分散にこの定数を加算して、数値安定性を確保し、ゼロ除算を回避します。
R2023a より前: Epsilon
は 1e-5
以上でなければなりません。
データ型: single
| double
| int8
| int16
| int32
| int64
| uint8
| uint16
| uint32
| uint64
NumChannels
— 入力チャネル数
'auto'
(既定値) | 正の整数
この プロパティ は読み取り専用です。
入力チャネル数。次のいずれかとして指定します。
'auto'
— 学習時に入力チャネルの数を自動的に決定します。正の整数 — 指定された数の入力チャネルの層を構成します。
NumChannels
と層入力データのチャネル数は一致しなければなりません。たとえば、入力が RGB イメージの場合、NumChannels
は 3 でなければなりません。入力が 16 個のフィルターをもつ畳み込み層の出力である場合、NumChannels
は 16 でなければなりません。
データ型: single
| double
| int8
| int16
| int32
| int64
| uint8
| uint16
| uint32
| uint64
| char
| string
パラメーターと初期化
ScaleInitializer
— チャネル スケール係数を初期化する関数
'ones'
(既定値) | 'narrow-normal'
| 関数ハンドル
チャネル スケール係数を初期化する関数。次のいずれかに指定します。
'ones'
– 1 でチャネル スケール係数を初期化します。'zeros'
– 0 でチャネル スケール係数を初期化します。'narrow-normal'
– 平均 0、標準偏差 0.01 の正規分布から個別にサンプリングを行って、チャネル スケール係数を初期化します。関数ハンドル – カスタム関数でチャネル スケール係数を初期化します。関数ハンドルを指定する場合、関数は
scale = func(sz)
という形式でなければなりません。ここで、sz
はスケールのサイズです。例については、カスタム重み初期化関数の指定を参照してください。
この層では、Scale
プロパティが空の場合にのみチャネル スケール係数が初期化されます。
データ型: char
| string
| function_handle
OffsetInitializer
— チャネル オフセットを初期化する関数
'zeros'
(既定値) | 'ones'
| 'narrow-normal'
| 関数ハンドル
チャネル オフセットを初期化する関数。次のいずれかに指定します。
'zeros'
– 0 でチャネル オフセットを初期化します。'ones'
– 1 でチャネル オフセットを初期化します。'narrow-normal'
– 平均 0、標準偏差 0.01 の正規分布から個別にサンプリングを行って、チャネル オフセットを初期化します。関数ハンドル – カスタム関数でチャネル オフセットを初期化します。関数ハンドルを指定する場合、関数は
offset = func(sz)
という形式でなければなりません。ここで、sz
はスケールのサイズです。例については、カスタム重み初期化関数の指定を参照してください。
この層では、Offset
プロパティが空の場合にのみチャネル オフセットが初期化されます。
データ型: char
| string
| function_handle
Scale
— チャネル スケール係数
[]
(既定値) | 数値配列
チャネル スケール係数 γ。数値配列として指定します。
チャネル スケール係数は学習可能なパラメーターです。関数 trainnet
または trainNetwork
を使用してネットワークに学習させるとき、または dlnetwork
オブジェクトを初期化するときに、Scale
が空でない場合、ソフトウェアは Scale
プロパティを初期値として使用します。Scale
が空の場合、ScaleInitializer
によって指定された初期化子が使用されます。
層入力のタイプに応じて、関数 trainnet
、trainNetwork
、assembleNetwork
、layerGraph
、および dlnetwork
は、次のサイズをもつようにこのプロパティを自動的に形状変更します。
層入力 | プロパティ サイズ |
---|---|
特徴入力 | NumChannels 行 1 列 |
ベクトル シーケンス入力 | |
1 次元イメージ入力 (R2023a 以降) | 1×NumChannels |
1 次元イメージ シーケンス入力 (R2023a 以降) | |
2 次元イメージ入力 | 1×1×NumChannels |
2 次元イメージ シーケンス入力 | |
3 次元イメージ入力 | 1×1×1×NumChannels |
3 次元イメージ シーケンス入力 |
データ型: single
| double
Offset
— チャネル オフセット
[]
(既定値) | 数値配列
チャネル オフセット β。数値ベクトルとして指定します。
チャネル オフセットは学習可能なパラメーターです。関数 trainnet
または trainNetwork
を使用してネットワークに学習させるとき、または dlnetwork
オブジェクトを初期化するときに、Offset
が空でない場合、ソフトウェアは Offset
プロパティを初期値として使用します。Offset
が空の場合、OffsetInitializer
によって指定された初期化子が使用されます。
層入力のタイプに応じて、関数 trainnet
、trainNetwork
、assembleNetwork
、layerGraph
、および dlnetwork
は、次のサイズをもつようにこのプロパティを自動的に形状変更します。
層入力 | プロパティ サイズ |
---|---|
特徴入力 | NumChannels 行 1 列 |
ベクトル シーケンス入力 | |
1 次元イメージ入力 (R2023a 以降) | 1×NumChannels |
1 次元イメージ シーケンス入力 (R2023a 以降) | |
2 次元イメージ入力 | 1×1×NumChannels |
2 次元イメージ シーケンス入力 | |
3 次元イメージ入力 | 1×1×1×NumChannels |
3 次元イメージ シーケンス入力 |
データ型: single
| double
学習率および正則化
ScaleLearnRateFactor
— スケール係数の学習率係数
1
(既定値) | 非負のスカラー
スケール係数の学習率係数。非負のスカラーとして指定します。
この係数にグローバル学習率が乗算されて、層のスケール係数の学習率が決定されます。たとえば、ScaleLearnRateFactor
が 2
の場合、層のスケール係数の学習率は現在のグローバル学習率の 2 倍になります。関数 trainingOptions
で指定された設定に基づいて、グローバル学習率が決定されます。
データ型: single
| double
| int8
| int16
| int32
| int64
| uint8
| uint16
| uint32
| uint64
OffsetLearnRateFactor
— オフセットの学習率係数
1
(既定値) | 非負のスカラー
オフセットの学習率係数。非負のスカラーとして指定します。
この係数にグローバル学習率が乗算されて、層のオフセットの学習率が決定されます。たとえば、OffsetLearnRateFactor
が 2
の場合、層のオフセットの学習率は現在のグローバル学習率の 2 倍になります。関数 trainingOptions
で指定された設定に基づいて、グローバル学習率が決定されます。
データ型: single
| double
| int8
| int16
| int32
| int64
| uint8
| uint16
| uint32
| uint64
ScaleL2Factor
— スケール係数の L2 正則化係数
1
(既定値) | 非負のスカラー
スケール係数の L2 正則化係数。非負のスカラーとして指定します。
この係数にグローバル L2 正則化係数が乗算されて、層のスケール係数の学習率が決定されます。たとえば、ScaleL2Factor
が 2
の場合、層のオフセットの L2 正則化はグローバル L2 正則化係数の 2 倍になります。グローバル L2 正則化係数は、関数 trainingOptions
を使用して指定できます。
データ型: single
| double
| int8
| int16
| int32
| int64
| uint8
| uint16
| uint32
| uint64
OffsetL2Factor
— オフセットの L2 正則化係数
1
(既定値) | 非負のスカラー
オフセットの L2 正則化係数。非負のスカラーとして指定します。
この係数にグローバル L2 正則化係数が乗算されて、層のオフセットの学習率が決定されます。たとえば、OffsetL2Factor
が 2
の場合、層のオフセットの L2 正則化はグローバル L2 正則化係数の 2 倍になります。グローバル L2 正則化係数は、関数 trainingOptions
を使用して指定できます。
データ型: single
| double
| int8
| int16
| int32
| int64
| uint8
| uint16
| uint32
| uint64
層
Name
— 層の名前
""
(既定値) | 文字ベクトル | string スカラー
層の名前。文字ベクトルまたは string スカラーとして指定します。Layer
配列入力の場合、関数 trainnet
、trainNetwork
、assembleNetwork
、layerGraph
、および dlnetwork
は、名前が ""
の層に自動的に名前を割り当てます。
InstanceNormalizationLayer
オブジェクトは、このプロパティを文字ベクトルとして格納します。
データ型: char
| string
NumInputs
— 入力の数
1
(既定値)
この プロパティ は読み取り専用です。
層への入力の数。1
として返されます。この層は単一の入力のみを受け入れます。
データ型: double
InputNames
— 入力名
{'in'}
(既定値)
この プロパティ は読み取り専用です。
入力名。{'in'}
として返されます。この層は単一の入力のみを受け入れます。
データ型: cell
NumOutputs
— 出力の数
1
(既定値)
この プロパティ は読み取り専用です。
層からの出力の数。1
として返されます。この層には単一の出力のみがあります。
データ型: double
OutputNames
— 出力名
{'out'}
(既定値)
この プロパティ は読み取り専用です。
出力名。{'out'}
として返されます。この層には単一の出力のみがあります。
データ型: cell
例
インスタンス正規化層の作成
'instancenorm'
という名前のインスタンス正規化層を作成します。
layer = instanceNormalizationLayer('Name','instancenorm')
layer = InstanceNormalizationLayer with properties: Name: 'instancenorm' NumChannels: 'auto' Hyperparameters Epsilon: 1.0000e-05 Learnable Parameters Offset: [] Scale: [] Use properties method to see a list of all properties.
Layer
配列にインスタンス正規化層を含めます。
layers = [
imageInputLayer([28 28 3])
convolution2dLayer(5,20)
instanceNormalizationLayer
reluLayer
maxPooling2dLayer(2,'Stride',2)
fullyConnectedLayer(10)
softmaxLayer
classificationLayer]
layers = 8x1 Layer array with layers: 1 '' Image Input 28x28x3 images with 'zerocenter' normalization 2 '' 2-D Convolution 20 5x5 convolutions with stride [1 1] and padding [0 0 0 0] 3 '' Instance Normalization Instance normalization 4 '' ReLU ReLU 5 '' 2-D Max Pooling 2x2 max pooling with stride [2 2] and padding [0 0 0 0] 6 '' Fully Connected 10 fully connected layer 7 '' Softmax softmax 8 '' Classification Output crossentropyex
アルゴリズム
インスタンス正規化層
インスタンス正規化演算は、各観測値の各チャネルについて、空間次元と時間次元における平均 μI と分散 σI2 をまず個別に計算することで、入力の要素 xi を正規化します。その後、正規化された活性化を次のように計算します。
ここで、ϵ は、分散が非常に小さいときに数値安定性を向上させる定数です。
ゼロ平均と単位分散をもつ入力がインスタンス正規化後の演算に最適ではない可能性を考慮して、インスタンス正規化演算は、次の変換を使用して活性化のさらなるシフトとスケーリングを行います。
ここで、オフセット β とスケール係数 γ は、ネットワークの学習中に更新される学習可能なパラメーターです。
層の入力形式と出力形式
層配列内または層グラフ内の層は、書式化された dlarray
オブジェクトとして後続の層にデータを渡します。dlarray
オブジェクトの形式は文字列で、各文字はデータ内の対応する次元を表します。この形式には次の文字が 1 つ以上含まれています。
"S"
— 空間"C"
— チャネル"B"
— バッチ"T"
— 時間"U"
— 指定なし
たとえば、4 次元配列として表された 2 次元イメージ データがあり、最初の 2 つの次元がイメージの空間次元に対応し、3 番目の次元がイメージのチャネルに対応し、4 番目の次元がバッチ次元に対応している場合、このイメージ データは "SSCB"
(spatial、spatial、channel、batch) という書式で表されます。
functionLayer
オブジェクトを使用するか、関数 forward
と関数 predict
を dlnetwork
オブジェクトと共に使用して、カスタム層の開発などの自動微分ワークフローで、これらの dlarray
オブジェクトを操作できます。
次の表は、InstanceNormalizationLayer
オブジェクトでサポートされている入力形式、および対応する出力形式を示しています。ソフトウェアが nnet.layer.Formattable
クラスを継承していないカスタム層、または Formattable
プロパティが 0
(false) に設定された FunctionLayer
オブジェクトに層の出力を渡す場合、その層は書式化されていない dlarray
オブジェクトを受け取り、この表に示された形式に従って次元が並べられます。ここには一部の形式のみを示します。層では、追加の "S"
(空間) 次元または "U"
(未指定) 次元をもつ形式など、追加の形式がサポートされている場合があります。
入力形式 | 出力形式 |
---|---|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
dlnetwork
オブジェクトでは、InstanceNormalizationLayer
オブジェクトもこれらの入力形式と出力形式の組み合わせをサポートします。
入力形式 | 出力形式 |
---|---|
|
|
|
|
|
|
|
|
バージョン履歴
R2021a で導入MATLAB コマンド
次の MATLAB コマンドに対応するリンクがクリックされました。
コマンドを MATLAB コマンド ウィンドウに入力して実行してください。Web ブラウザーは MATLAB コマンドをサポートしていません。
Select a Web Site
Choose a web site to get translated content where available and see local events and offers. Based on your location, we recommend that you select: .
You can also select a web site from the following list:
How to Get Best Site Performance
Select the China site (in Chinese or English) for best site performance. Other MathWorks country sites are not optimized for visits from your location.
Americas
- América Latina (Español)
- Canada (English)
- United States (English)
Europe
- 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)