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 プロパティが空ではない場合、関数 trainnet および trainNetworkWeights プロパティを初期値として使用します。Weights プロパティが空の場合、ソフトウェアは層の WeightsInitializer プロパティによって指定された初期化子を使用します。

データ型: single | double

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

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

データ型: 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 倍になります。関数 trainingOptions で指定した設定に基づいて、グローバル L2 正則化係数が決定されます。

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

すべて折りたたむ

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

transposedConv2dLayer オブジェクトは、このプロパティを文字ベクトルとして格納します。

データ型: char | string

出力引数

すべて折りたたむ

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

アルゴリズム

すべて折りたたむ

2 次元転置畳み込み層

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

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

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

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

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

Animation showing a sliding 3-by-3 transposed convolutional filter over an image. The input image is padded such that it is two pixels larger in each direction. When the filter slides over the input image, it can cover the padding regions. The input is a 2-by-2 image. The padded input is a 6-by-6 image. The output is a 4-by-4 image.

層の入力形式と出力形式

層配列内または層グラフ内の層は、書式化された dlarray オブジェクトとして後続の層にデータを渡します。dlarray オブジェクトの形式は文字列で、各文字はデータ内の対応する次元を表します。この形式には次の文字が 1 つ以上含まれています。

  • "S" — 空間

  • "C" — チャネル

  • "B" — バッチ

  • "T" — 時間

  • "U" — 指定なし

たとえば、4 次元配列として表された 2 次元イメージ データがあり、最初の 2 つの次元がイメージの空間次元に対応し、3 番目の次元がイメージのチャネルに対応し、4 番目の次元がバッチ次元に対応している場合、このイメージ データは "SSCB" (spatial、spatial、channel、batch) という書式で表されます。

functionLayer オブジェクトを使用するか、関数 forward と関数 predictdlnetwork オブジェクトと共に使用して、カスタム層の開発などの自動微分ワークフローで、これらの dlarray オブジェクトを操作できます。

次の表は、TransposedConvolution2DLayer オブジェクトでサポートされている入力形式、および対応する出力形式を示しています。nnet.layer.Formattable クラスを継承していないカスタム層、または Formattable プロパティが 0 (false) に設定された FunctionLayer オブジェクトに層の出力が渡される場合、その層は書式化されていない dlarray オブジェクトを受け取り、この表に示された形式に従って次元が並べられます。

入力形式出力形式

"SSCB" (spatial、spatial、channel、batch)

"SSCB" (spatial、spatial、channel、batch)

"SSC" (spatial、spatial、channel)

"SSC" (spatial、spatial、channel)

dlnetwork オブジェクトでは、TransposedConvolution2DLayer オブジェクトもこれらの入力形式と出力形式の組み合わせをサポートします。

入力形式出力形式

"SSCBT" (spatial、spatial、channel、batch、time)

"SSCBT" (spatial、spatial、channel、batch、time)

"SSCT" (spatial、spatial、channel、time)

"SSCT" (spatial、spatial、channel、time)

参照

[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. https://proceedings.mlr.press/v9/glorot10a/glorot10a.pdf

[2] He, Kaiming, Xiangyu Zhang, Shaoqing Ren, and Jian Sun. "Delving Deep into Rectifiers: Surpassing Human-Level Performance on ImageNet Classification." In 2015 IEEE International Conference on Computer Vision (ICCV), 1026–34. Santiago, Chile: IEEE, 2015. https://doi.org/10.1109/ICCV.2015.123

拡張機能

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

バージョン履歴

R2017b で導入

すべて展開する


1 Image credit: Convolution arithmetic (License)