Main Content

このページの翻訳は最新ではありません。ここをクリックして、英語の最新版を参照してください。

transposedConv2dLayer

2 次元転置畳み込み層

説明

2 次元転置畳み込み層では 2 次元の特徴マップがアップサンプリングされます。

この層は、間違って "逆畳み込み" 層または "deconv" 層と呼ばれることがあります。この層は、逆畳み込みを実行するのではなく、畳み込みの転置を実行します。

layer = transposedConv2dLayer(filterSize,numFilters) は、2 次元転置畳み込み層を返し、FilterSize プロパティおよび NumFilters プロパティを設定します。

layer = transposedConv2dLayer(filterSize,numFilters,Name,Value) は、2 次元転置畳み込み層を返し、1 つ以上の名前と値のペアの引数を使用して追加のオプションを指定します。

すべて折りたたむ

高さと幅がそれぞれ 11 のフィルターを 96 個もつ転置畳み込み層を作成します。水平方向と垂直方向のストライドに 4 を使用します。

layer = transposedConv2dLayer(11,96,'Stride',4);

入力引数

すべて折りたたむ

フィルターの高さと幅。正の整数、または 2 つの正の整数から成るベクトル [h w] として指定します。h は高さ、w は幅です。フィルターのサイズは、入力でニューロンが結合する局所領域のサイズを定義します。

filterSize が正の整数の場合、ソフトウェアはどちらの次元についても同じ値を使用します。

例: [5 6] は、高さと幅がそれぞれ 5 および 6 であるフィルターを指定します。

データ型: single | double | int8 | int16 | int32 | int64 | uint8 | uint16 | uint32 | uint64

フィルターの数。正の整数として指定します。この数値は、入力の同じ領域に結合する層のニューロンの数に対応します。このパラメーターは、層の出力におけるチャネル (特徴マップ) の数を決定します。

データ型: single | double | int8 | int16 | int32 | int64 | uint8 | uint16 | uint32 | uint64

名前と値の引数

オプションの引数のペアを Name1=Value1,...,NameN=ValueN として指定します。ここで、Name は引数名で、Value は対応する値です。名前と値の引数は他の引数の後に指定しなければなりませんが、ペアの順序は重要ではありません。

R2021a より前では、コンマを使用して名前と値の各ペアを区切り、Name を引用符で囲みます。

例: transposedConv2dLayer(11,96,'Stride',4) は、サイズが 11 でストライドが 4 である 96 個のフィルターをもつ 2 次元転置畳み込み層を作成します。

転置畳み込み

すべて折りたたむ

入力のアップサンプリング係数。次のいずれかとして指定します。

  • 2 つの正の整数から成るベクトル [a b]a は垂直方向のストライド、b 水平方向のストライドです。

  • 垂直方向および水平方向のストライドに対応する正の整数。

例: 'Stride',[2 1]

データ型: single | double | int8 | int16 | int32 | int64 | uint8 | uint16 | uint32 | uint64

出力サイズの削減。次のいずれかとして指定します。

  • "same" – 出力サイズが inputSize.*Stride と等しくなるようにトリミングを設定します。ここで、inputSize は層の入力の高さと幅です。Cropping オプションを "same" に設定した場合、層の CroppingMode プロパティが自動的に 'same' に設定されます。

    可能な場合、上下および左右が同じ量だけトリミングされます。垂直方向のトリミング量が奇数の場合、下にある行が余分にトリミングされます。水平方向のトリミング量が奇数の場合、右にある列が余分にトリミングされます。

  • 正の整数 – すべての端から指定された量のデータがトリミングされます。

  • 非負の整数から成るベクトル [a b] - 上下の端から a だけトリミングし、左右の端から b だけトリミングします。

  • ベクトル [t b l r] - 入力の上下左右からそれぞれ tblr だけトリミングします。

Cropping オプションを数値に設定した場合、層の CroppingMode プロパティが自動的に 'manual' に設定されます。

例: [1 2]

データ型: single | double | int8 | int16 | int32 | int64 | uint8 | uint16 | uint32 | uint64 | char | string

入力チャネル数。次のいずれかとして指定します。

  • "auto" — 学習時に入力チャネルの数を自動的に決定します。

  • 正の整数 — 指定された数の入力チャネルの層を構成します。NumChannels と層入力データのチャネル数は一致しなければなりません。たとえば、入力が RGB イメージの場合、NumChannels は 3 でなければなりません。入力が 16 個のフィルターをもつ畳み込み層の出力である場合、NumChannels は 16 でなければなりません。

データ型: single | double | int8 | int16 | int32 | int64 | uint8 | uint16 | uint32 | uint64 | char | string

パラメーターと初期化

すべて折りたたむ

重みを初期化する関数。次のいずれかに指定します。

  • 'glorot' – Glorot 初期化子[1](Xavier 初期化子とも呼ばれる) を使用して重みを初期化します。Glorot 初期化子は、平均 0、分散 2/(numIn + numOut) の一様分布から個別にサンプリングを行います。ここで、numIn = FilterSize(1)*FilterSize(2)*NumChannels および numOut = FilterSize(1)*FilterSize(2)*NumFilters です。

  • 'he' – He 初期化子[2]を使用して重みを初期化します。He 初期化子は、平均 0、分散 2/numIn の正規分布からサンプリングを行います。ここで、numIn = FilterSize(1)*FilterSize(2)*NumChannels です。

  • 'narrow-normal' – 平均 0、標準偏差 0.01 の正規分布から個別にサンプリングを行って、重みを初期化します。

  • 'zeros' – 0 で重みを初期化します。

  • 'ones' – 1 で重みを初期化します。

  • 関数ハンドル – カスタム関数で重みを初期化します。関数ハンドルを指定する場合、関数は weights = func(sz) という形式でなければなりません。ここで、sz は重みのサイズです。例については、カスタム重み初期化関数の指定を参照してください。

この層では、Weights プロパティが空の場合にのみ重みが初期化されます。

データ型: char | string | function_handle

バイアスを初期化する関数。次のいずれかに指定します。

  • 'zeros' — 0 でバイアスを初期化します。

  • 'ones' — 1 でバイアスを初期化します。

  • 'narrow-normal' — 平均 0、標準偏差 0.01 の正規分布から個別にサンプリングを行って、バイアスを初期化します。

  • 関数ハンドル — カスタム関数でバイアスを初期化します。関数ハンドルを指定する場合、関数は bias = func(sz) という形式でなければなりません。ここで、sz はバイアスのサイズです。

この層では、Bias プロパティが空の場合にのみバイアスが初期化されます。

データ型: char | string | function_handle

転置畳み込み演算で使用する層の重み。filterSize(1)×filterSize(2)×numFilters×NumChannels の数値配列、または [] として指定します。

層の重みは学習可能なパラメーターです。層の Weights プロパティを使用して、重みに直接、初期値を指定できます。ネットワークに学習させるときに、層の Weights プロパティが空ではない場合、trainNetworkWeights プロパティを初期値として使用します。Weights プロパティが空の場合、trainNetwork は層の WeightsInitializer プロパティによって指定された初期化子を使用します。

データ型: single | double

転置畳み込み演算で使用する層のバイアス。1×1×numFilters の数値配列、または [] として指定します。

層のバイアスは学習可能なパラメーターです。ネットワークの学習時に、Bias が空ではない場合、trainNetworkBias プロパティを初期値として使用します。Bias が空の場合、trainNetworkBiasInitializer によって指定された初期化子を使用します。

データ型: single | double

学習率および正則化

すべて折りたたむ

重みの学習率係数。非負のスカラーとして指定します。

この係数にグローバル学習率が乗算されて、この層の重みの学習率が決定されます。たとえば、WeightLearnRateFactor2 の場合、この層の重みの学習率は現在のグローバル学習率の 2 倍になります。関数 trainingOptions で指定した設定に基づいて、グローバル学習率が決定されます。

データ型: single | double | int8 | int16 | int32 | int64 | uint8 | uint16 | uint32 | uint64

バイアスの学習率係数。非負のスカラーとして指定します。

この係数にグローバル学習率が乗算されて、この層のバイアスの学習率が決定されます。たとえば、BiasLearnRateFactor2 の場合、層のバイアスの学習率は現在のグローバル学習率の 2 倍になります。関数 trainingOptions で指定した設定に基づいて、グローバル学習率が決定されます。

データ型: single | double | int8 | int16 | int32 | int64 | uint8 | uint16 | uint32 | uint64

重みの L2 正則化係数。非負のスカラーとして指定します。

この係数にグローバル L2 正則化係数が乗算されて、この層の重みの L2 正則化が決定されます。たとえば、WeightL2Factor2 の場合、この層の重みの L2 正則化はグローバル L2 正則化係数の 2 倍になります。グローバル L2 正則化係数は、関数 trainingOptions を使用して指定できます。

データ型: single | double | int8 | int16 | int32 | int64 | uint8 | uint16 | uint32 | uint64

バイアスの L2 正則化係数。非負のスカラーとして指定します。

この係数にグローバル L2 正則化係数が乗算されて、この層のバイアスの L2 正則化が決定されます。たとえば、BiasL2Factor2 の場合、この層のバイアスの L2 正則化はグローバル L2 正則化係数の 2 倍になります。グローバル L2 正則化係数は、関数 trainingOptions を使用して指定できます。

データ型: single | double | int8 | int16 | int32 | int64 | uint8 | uint16 | uint32 | uint64

すべて折りたたむ

層の名前。文字ベクトルまたは string スカラーとして指定します。Layer 配列入力の場合、関数 trainNetworkassembleNetworklayerGraph、および dlnetwork は、名前が '' の層に自動的に名前を割り当てます。

データ型: char | string

出力引数

すべて折りたたむ

2 次元転置畳み込み層。TransposedConvolution2DLayer オブジェクトとして返されます。

アルゴリズム

すべて折りたたむ

2 次元転置畳み込み層

2 次元転置畳み込み層では 2 次元の特徴マップがアップサンプリングされます。

"標準の" 畳み込み演算は、入力にスライディング畳み込みフィルターを適用して入力を "ダウンサンプリング" します。入力と出力をフラット化することで、層の重みとバイアスから派生させることができる畳み込み行列 C とバイアス ベクトル B に関する畳み込み演算を Y=CX+B として表すことができます。

同様に、"転置" 畳み込み演算は、入力にスライディング畳み込みフィルターを適用して入力を "アップサンプリング" します。スライディング フィルターを使用して入力をダウンサンプリングする代わりにアップサンプリングするには、対応するフィルターのエッジのサイズから 1 を減じたサイズのパディングを使用して、層の入力の各エッジを 0 でパディングします。

入力と出力をフラット化することで、転置畳み込み演算は Y=CX+B と等価になります。ここで、C および B は、それぞれ、層の重みとバイアスから派生させ、標準の畳み込みで使用する畳み込み行列とバイアス行列を表します。この処理は、標準の畳み込み層における逆方向関数と等価です。

次のイメージは、2 行 2 列の入力をアップサンプリングする 4 行 4 列のフィルターを示しています。下側のマップは入力を表し、上側のマップは出力を表します。 1

参照

[1] Glorot, Xavier, and Yoshua Bengio. "Understanding the Difficulty of Training Deep Feedforward Neural Networks." In Proceedings of the Thirteenth International Conference on Artificial Intelligence and Statistics, 249–356. Sardinia, Italy: AISTATS, 2010.

[2] He, Kaiming, Xiangyu Zhang, Shaoqing Ren, and Jian Sun. "Delving Deep into Rectifiers: Surpassing Human-Level Performance on ImageNet Classification." In Proceedings of the 2015 IEEE International Conference on Computer Vision, 1026–1034. Washington, DC: IEEE Computer Vision Society, 2015.

拡張機能

GPU コード生成
GPU Coder™ を使用して NVIDIA® GPU のための CUDA® コードを生成します。

バージョン履歴

R2017b で導入

すべて展開する


1 Image credit: Convolution arithmetic (License)