instanceNormalizationLayer
説明
インスタンス正規化層は、各チャネル全体におけるデータのミニバッチの正規化を、各観測値について個別に行います。畳み込みニューラル ネットワークの学習の収束性能を上げ、ネットワークのハイパーパラメーターに対する感度を下げるには、畳み込み層の間にあるインスタンス正規化層と、ReLU 層などの非線形性を使用します。
正規化後、この層は、学習可能なパラメーターのスケール係数 γ だけ入力をスケーリングし、それを学習可能なパラメーターのオフセット β だけシフトします。
作成
説明
layer = instanceNormalizationLayer
は、インスタンス正規化層を作成します。
layer = instanceNormalizationLayer(Name,Value)
は、インスタンス正規化層を作成し、1 つ以上の名前と値の引数を使用して、オプションの Epsilon
、パラメーターと初期化、学習率および正則化、および Name
プロパティを設定します。複数の名前と値の引数を指定できます。各プロパティ名を引用符で囲みます。
例: instanceNormalizationLayer('Name','instancenorm')
は、'instancenorm'
という名前のインスタンス正規化層を作成します。
プロパティ
インスタンス正規化
ミニバッチの分散に加算する定数。正のスカラーとして指定します。
ソフトウェアは、正規化の前にミニバッチの分散にこの定数を加算して、数値安定性を確保し、ゼロ除算を回避します。
R2023a より前: Epsilon
は 1e-5
以上でなければなりません。
データ型: single
| double
| int8
| int16
| int32
| int64
| uint8
| uint16
| uint32
| uint64
この プロパティ は読み取り専用です。
入力チャネル数。次のいずれかとして指定します。
"auto"
— 学習時に入力チャネルの数を自動的に決定します。正の整数 — 指定された数の入力チャネルの層を構成します。
NumChannels
と層入力データのチャネル数は一致しなければなりません。たとえば、入力が RGB イメージの場合、NumChannels
は 3 でなければなりません。入力が 16 個のフィルターをもつ畳み込み層の出力である場合、NumChannels
は 16 でなければなりません。
データ型: single
| double
| int8
| int16
| int32
| int64
| uint8
| uint16
| uint32
| uint64
| char
| string
パラメーターと初期化
チャネル スケール係数を初期化する関数。次のいずれかに指定します。
'ones'
– 1 でチャネル スケール係数を初期化します。'zeros'
– 0 でチャネル スケール係数を初期化します。'narrow-normal'
– 平均 0、標準偏差 0.01 の正規分布から個別にサンプリングを行って、チャネル スケール係数を初期化します。関数ハンドル – カスタム関数でチャネル スケール係数を初期化します。関数ハンドルを指定する場合、関数は
scale = func(sz)
という形式でなければなりません。ここで、sz
はスケールのサイズです。例については、カスタム重み初期化関数の指定を参照してください。
この層では、Scale
プロパティが空の場合にのみチャネル スケール係数が初期化されます。
データ型: char
| string
| function_handle
チャネル オフセットを初期化する関数。次のいずれかに指定します。
'zeros'
– 0 でチャネル オフセットを初期化します。'ones'
– 1 でチャネル オフセットを初期化します。'narrow-normal'
– 平均 0、標準偏差 0.01 の正規分布から個別にサンプリングを行って、チャネル オフセットを初期化します。関数ハンドル – カスタム関数でチャネル オフセットを初期化します。関数ハンドルを指定する場合、関数は
offset = func(sz)
という形式でなければなりません。ここで、sz
はスケールのサイズです。例については、カスタム重み初期化関数の指定を参照してください。
この層では、Offset
プロパティが空の場合にのみチャネル オフセットが初期化されます。
データ型: char
| string
| function_handle
チャネル スケール係数 γ。数値配列として指定します。
チャネル スケール係数は学習可能なパラメーターです。関数 trainnet
を使用してネットワークに学習させるとき、または dlnetwork
オブジェクトを初期化するときに、Scale
が空でない場合、ソフトウェアは Scale
プロパティを初期値として使用します。Scale
が空の場合、ScaleInitializer
によって指定された初期化子が使用されます。
層入力のタイプに応じて、関数 trainnet
および dlnetwork
は、次のサイズをもつようにこのプロパティを自動的に形状変更します。
層入力 | プロパティ サイズ |
---|---|
特徴入力 | NumChannels 行 1 列 |
ベクトル シーケンス入力 | |
1 次元イメージ入力 (R2023a 以降) | 1×NumChannels |
1 次元イメージ シーケンス入力 (R2023a 以降) | |
2 次元イメージ入力 | 1×1×NumChannels |
2 次元イメージ シーケンス入力 | |
3 次元イメージ入力 | 1×1×1×NumChannels |
3 次元イメージ シーケンス入力 |
データ型: single
| double
チャネル オフセット β。数値ベクトルとして指定します。
チャネル オフセットは学習可能なパラメーターです。関数 trainnet
を使用してネットワークに学習させるとき、または dlnetwork
オブジェクトを初期化するときに、Offset
が空でない場合、ソフトウェアは Offset
プロパティを初期値として使用します。Offset
が空の場合、OffsetInitializer
によって指定された初期化子が使用されます。
層入力のタイプに応じて、関数 trainnet
および dlnetwork
は、次のサイズをもつようにこのプロパティを自動的に形状変更します。
層入力 | プロパティ サイズ |
---|---|
特徴入力 | NumChannels 行 1 列 |
ベクトル シーケンス入力 | |
1 次元イメージ入力 (R2023a 以降) | 1×NumChannels |
1 次元イメージ シーケンス入力 (R2023a 以降) | |
2 次元イメージ入力 | 1×1×NumChannels |
2 次元イメージ シーケンス入力 | |
3 次元イメージ入力 | 1×1×1×NumChannels |
3 次元イメージ シーケンス入力 |
データ型: single
| double
学習率および正則化
スケール係数の学習率係数。非負のスカラーとして指定します。
この係数にグローバル学習率が乗算されて、層のスケール係数の学習率が決定されます。たとえば、ScaleLearnRateFactor
が 2
の場合、層のスケール係数の学習率は現在のグローバル学習率の 2 倍になります。関数 trainingOptions
で指定された設定に基づいて、グローバル学習率が決定されます。
データ型: single
| double
| int8
| int16
| int32
| int64
| uint8
| uint16
| uint32
| uint64
オフセットの学習率係数。非負のスカラーとして指定します。
この係数にグローバル学習率が乗算されて、層のオフセットの学習率が決定されます。たとえば、OffsetLearnRateFactor
が 2
の場合、層のオフセットの学習率は現在のグローバル学習率の 2 倍になります。関数 trainingOptions
で指定された設定に基づいて、グローバル学習率が決定されます。
データ型: single
| double
| int8
| int16
| int32
| int64
| uint8
| uint16
| uint32
| uint64
スケール係数の L2 正則化係数。非負のスカラーとして指定します。
この係数にグローバル L2 正則化係数が乗算されて、層のスケール係数の学習率が決定されます。たとえば、ScaleL2Factor
が 2
の場合、層のオフセットの L2 正則化はグローバル L2 正則化係数の 2 倍になります。グローバル L2 正則化係数は、関数 trainingOptions
を使用して指定できます。
データ型: single
| double
| int8
| int16
| int32
| int64
| uint8
| uint16
| uint32
| uint64
オフセットの L2 正則化係数。非負のスカラーとして指定します。
この係数にグローバル L2 正則化係数が乗算されて、層のオフセットの学習率が決定されます。たとえば、OffsetL2Factor
が 2
の場合、層のオフセットの L2 正則化はグローバル L2 正則化係数の 2 倍になります。グローバル L2 正則化係数は、関数 trainingOptions
を使用して指定できます。
データ型: single
| double
| int8
| int16
| int32
| int64
| uint8
| uint16
| uint32
| uint64
層
この プロパティ は読み取り専用です。
層への入力の数。1
として格納されます。この層は単一の入力のみを受け入れます。
データ型: double
この プロパティ は読み取り専用です。
入力名。{'in'}
として格納されます。この層は単一の入力のみを受け入れます。
データ型: cell
この プロパティ は読み取り専用です。
層からの出力の数。1
として格納されます。この層には単一の出力のみがあります。
データ型: double
この プロパティ は読み取り専用です。
出力名。{'out'}
として格納されます。この層には単一の出力のみがあります。
データ型: cell
例
'instancenorm'
という名前のインスタンス正規化層を作成します。
layer = instanceNormalizationLayer('Name','instancenorm')
layer = InstanceNormalizationLayer with properties: Name: 'instancenorm' NumChannels: 'auto' Hyperparameters Epsilon: 1.0000e-05 Learnable Parameters Offset: [] Scale: [] Show all properties
Layer
配列にインスタンス正規化層を含めます。
layers = [
imageInputLayer([28 28 3])
convolution2dLayer(5,20)
instanceNormalizationLayer
reluLayer
maxPooling2dLayer(2,'Stride',2)
fullyConnectedLayer(10)
softmaxLayer]
layers = 7×1 Layer array with layers: 1 '' Image Input 28×28×3 images with 'zerocenter' normalization 2 '' 2-D Convolution 20 5×5 convolutions with stride [1 1] and padding [0 0 0 0] 3 '' Instance Normalization Instance normalization 4 '' ReLU ReLU 5 '' 2-D Max Pooling 2×2 max pooling with stride [2 2] and padding [0 0 0 0] 6 '' Fully Connected 10 fully connected layer 7 '' Softmax softmax
アルゴリズム
インスタンス正規化演算は、各観測値の各チャネルについて、空間次元と時間次元における平均 μI と分散 σI2 をまず個別に計算することで、入力の要素 xi を正規化します。その後、正規化された活性化を次のように計算します。
ここで、ϵ は、分散が非常に小さいときに数値安定性を向上させる定数です。
ゼロ平均と単位分散をもつ入力がインスタンス正規化後の演算に最適ではない可能性を考慮して、インスタンス正規化演算は、次の変換を使用して活性化のさらなるシフトとスケーリングを行います。
ここで、オフセット β とスケール係数 γ は、ネットワークの学習中に更新される学習可能なパラメーターです。
層配列内または層グラフ内の層は、形式を整えた dlarray
オブジェクトとして後続の層にデータを渡します。dlarray
オブジェクトの形式は文字列で、各文字はデータ内の対応する次元を表します。この形式には次の文字が 1 つ以上含まれています。
"S"
— 空間"C"
— チャネル"B"
— バッチ"T"
— 時間"U"
— 指定なし
たとえば、4 次元配列として表された 2 次元イメージ データがあり、最初の 2 つの次元がイメージの空間次元に対応し、3 番目の次元がイメージのチャネルに対応し、4 番目の次元がバッチ次元に対応している場合、このイメージ データは "SSCB"
(空間、空間、チャネル、バッチ) という形式で記述できます。
functionLayer
オブジェクトを使用するか、関数 forward
と関数 predict
を dlnetwork
オブジェクトと共に使用して、カスタム層の開発などの自動微分ワークフローで、これらの dlarray
オブジェクトを操作できます。
次の表は、InstanceNormalizationLayer
オブジェクトでサポートされている入力形式、および対応する出力形式を示しています。ソフトウェアが nnet.layer.Formattable
クラスを継承していないカスタム層、または Formattable
プロパティが 0
(false
) に設定された FunctionLayer
オブジェクトに層の出力を渡す場合、その層は形式を整えていない dlarray
オブジェクトを受け取り、この表に示された形式に従って次元が並べられます。ここには一部の形式のみを示します。層では、追加の "S"
(空間) 次元または "U"
(未指定) 次元をもつ形式など、追加の形式がサポートされている場合があります。
入力形式 | 出力形式 |
---|---|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
dlnetwork
オブジェクトでは、InstanceNormalizationLayer
オブジェクトもこれらの入力形式と出力形式の組み合わせをサポートします。
入力形式 | 出力形式 |
---|---|
|
|
|
|
|
|
|
|
拡張機能
C/C++ コード生成
MATLAB® Coder™ を使用して C および C++ コードを生成します。
GPU コード生成
GPU Coder™ を使用して NVIDIA® GPU のための CUDA® コードを生成します。
バージョン履歴
R2021a で導入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)