TransposedConvolution2DLayer
2 次元転置畳み込み層
説明
2 次元転置畳み込み層では 2 次元の特徴マップがアップサンプリングされます。
この層は、間違って "逆畳み込み" 層または "deconv" 層と呼ばれることがあります。この層は畳み込みの転置であり、逆畳み込みは実行しません。
作成
transposedConv2dLayer を使用して 2 次元転置畳み込み層を作成します。
プロパティ
転置畳み込み
フィルターの高さと幅。2 つの正の整数のベクトル [h w] として指定します。h は高さ、w は幅です。FilterSize は、入力でニューロンが結合する局所領域のサイズを定義します。
入力引数を使用して FilterSize を設定する場合、FilterSize をスカラーとして指定して、両方の次元に同じ値を使用できます。
例: [5 5] は、高さが 5、幅が 5 のフィルターを指定します。
データ型: single | double | int8 | int16 | int32 | int64 | uint8 | uint16 | uint32 | uint64
この プロパティ は読み取り専用です。
フィルターの数。正の整数として指定します。この数値は、入力の同じ領域に結合する層のニューロンの数に対応します。このパラメーターは、層の出力のチャネル (特徴マップ) の数を決定します。
データ型: single | double | int8 | int16 | int32 | int64 | uint8 | uint16 | uint32 | uint64
入力を垂直方向および水平方向に走査するステップ サイズ。2 つの正の整数のベクトル [a b] として指定します。a は垂直方向のステップ サイズ、b は水平方向のステップ サイズです。層を作成する場合、Stride をスカラーとして指定して、両方のステップ サイズに同じ値を使用できます。
例: [2 3] は、垂直方向のステップ サイズとして 2、水平方向のステップ サイズとして 3 を指定します。
トリミング サイズを決定するメソッド。'manual' または same として指定します。
ソフトウェアは、層の作成時に指定した 'Cropping' の値に基づいて CroppingMode の値を自動的に設定します。
Croppingオプションを数値に設定した場合、層のCroppingModeプロパティが自動的に'manual'に設定されます。'Cropping'オプションを'same'に設定すると、ソフトウェアは層のCroppingModeプロパティを自動的に'same'に設定し、出力サイズがinputSize .* Strideと等しくなるようにトリミングを設定します。ここで、inputSizeは層入力の高さと幅です。
トリミング サイズを指定するには、transposedConv2dLayer の 'Cropping' オプションを使用します。
出力サイズの削減。4 つの非負の整数のベクトル [t b l r] として指定します。ここで、t、b、l、r は、それぞれ上、下、左、右からトリミングする量です。
トリミング サイズを手動で指定するには、transposedConv2dLayer の 'Cropping' オプションを使用します。
例: [0 1 0 1]
メモ
Cropping プロパティは将来のリリースで削除される予定です。代わりに CroppingSize を使用してください。トリミング サイズを手動で指定するには、transposedConv2dLayer の 'Cropping' オプションを使用します。
出力サイズの削減。2 つの非負の整数のベクトル [a b] として指定します。ここで、a は上と下からのトリミングに対応し、b は左と右からのトリミングに対応します。
トリミング サイズを手動で指定するには、transposedConv2dLayer の 'Cropping' オプションを使用します。
例: [0 1]
この プロパティ は読み取り専用です。
入力チャネル数。次のいずれかとして指定します。
"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 プロパティが空の場合にのみバイアスが初期化されます。
TransposedConvolution2DLayer オブジェクトは、このプロパティを文字ベクトルまたは関数ハンドルとして格納します。
データ型: char | string | function_handle
畳み込み層の重み。FilterSize(1)×FilterSize(2)×NumFilters×NumChannels の配列として指定します。
層の重みは学習可能なパラメーターです。層の Weights プロパティを使用して、重みの初期値を直接指定できます。ネットワークに学習させるときに、層の Weights プロパティが空でない場合、trainnet 関数は Weights プロパティを初期値として使用します。Weights プロパティが空の場合、ソフトウェアは層の WeightsInitializer プロパティによって指定された初期化子を使用します。
データ型: single | double
畳み込み層のバイアス。数値配列として指定します。
層のバイアスは学習可能なパラメーターです。ニューラル ネットワークに学習させるときに、Bias が空でない場合、trainnet 関数は Bias プロパティを初期値として使用します。Bias が空の場合、ソフトウェアは BiasInitializer によって指定された初期化子を使用します。
学習時、Bias は 1 x 1 x NumFilters の配列です。
データ型: single | double
学習率および正則化
重みの学習率係数。非負のスカラーとして指定します。
この係数にグローバル学習率が乗算されて、この層の重みの学習率が決定されます。たとえば、WeightLearnRateFactor が 2 の場合、この層の重みの学習率は現在のグローバル学習率の 2 倍になります。関数 trainingOptions で指定した設定に基づいて、グローバル学習率が決定されます。
データ型: single | double | int8 | int16 | int32 | int64 | uint8 | uint16 | uint32 | uint64
バイアスの学習率係数。非負のスカラーとして指定します。
この係数にグローバル学習率が乗算されて、この層のバイアスの学習率が決定されます。たとえば、BiasLearnRateFactor が 2 の場合、層のバイアスの学習率は現在のグローバル学習率の 2 倍になります。関数 trainingOptions で指定した設定に基づいて、グローバル学習率が決定されます。
データ型: single | double | int8 | int16 | int32 | int64 | uint8 | uint16 | uint32 | uint64
重みの L2 正則化係数。非負のスカラーとして指定します。
この係数にグローバル L2 正則化係数が乗算されて、この層の重みの L2 正則化が決定されます。たとえば、WeightL2Factor が 2 の場合、この層の重みの L2 正則化はグローバル L2 正則化係数の 2 倍になります。グローバル L2 正則化係数は、関数 trainingOptions を使用して指定できます。
データ型: single | double | int8 | int16 | int32 | int64 | uint8 | uint16 | uint32 | uint64
バイアスの L2 正則化係数。非負のスカラーとして指定します。
この係数にグローバル L2 正則化係数が乗算されて、この層のバイアスの L2 正則化が決定されます。たとえば、BiasL2Factor が 2 の場合、この層のバイアスの L2 正則化はグローバル L2 正則化係数の 2 倍になります。関数 trainingOptions で指定した設定に基づいて、グローバル L2 正則化係数が決定されます。
データ型: single | double | int8 | int16 | int32 | int64 | uint8 | uint16 | uint32 | uint64
層
この プロパティ は読み取り専用です。
層への入力の数。1 として格納されます。この層は単一の入力のみを受け入れます。
データ型: double
この プロパティ は読み取り専用です。
入力名。{'in'} として格納されます。この層は単一の入力のみを受け入れます。
データ型: cell
この プロパティ は読み取り専用です。
層からの出力の数。1 として格納されます。この層には単一の出力のみがあります。
データ型: double
この プロパティ は読み取り専用です。
出力名。{'out'} として格納されます。この層には単一の出力のみがあります。
データ型: cell
例
高さと幅がそれぞれ 11 のフィルターを 96 個もつ転置畳み込み層を作成します。水平方向と垂直方向のストライドに 4 を使用します。
layer = transposedConv2dLayer(11,96,'Stride',4);アルゴリズム
2 次元転置畳み込み層では 2 次元の特徴マップがアップサンプリングされます。
"標準の" 畳み込み演算は、入力にスライディング畳み込みフィルターを適用して入力を "ダウンサンプリング" します。入力と出力をフラット化することで、層の重みとバイアスから派生させることができる畳み込み行列 C とバイアス ベクトル B に関する畳み込み演算を として表すことができます。
同様に、"転置" 畳み込み演算は、入力にスライディング畳み込みフィルターを適用して入力を "アップサンプリング" します。スライディング フィルターを使用して入力をダウンサンプリングする代わりにアップサンプリングするには、対応するフィルターのエッジのサイズから 1 を減じたサイズのパディングを使用して、層の入力の各エッジを 0 でパディングします。
入力と出力をフラット化することで、転置畳み込み演算は と等価になります。ここで、C および B は、それぞれ、層の重みとバイアスから派生させ、標準の畳み込みで使用する畳み込み行列とバイアス ベクトルを表します。この処理は、標準の畳み込み層における backward 関数と等価です。
次のイメージは、2 行 2 列の入力をアップサンプリングする 3 行 3 列のフィルターを示しています。下側のマップは入力を表し、上側のマップは出力を表します。 1

層配列内または層グラフ内の層は、形式を整えた dlarray オブジェクトとして後続の層にデータを渡します。dlarray オブジェクトの形式は文字列で、各文字はデータ内の対応する次元を表します。この形式には次の文字が 1 つ以上含まれています。
"S"— 空間"C"— チャネル"B"— バッチ"T"— 時間"U"— 指定なし
たとえば、4 次元配列として表された 2 次元イメージ データがあり、最初の 2 つの次元がイメージの空間次元に対応し、3 番目の次元がイメージのチャネルに対応し、4 番目の次元がバッチ次元に対応している場合、このイメージ データは "SSCB" (空間、空間、チャネル、バッチ) という形式で記述できます。
functionLayer オブジェクトを使用するか、関数 forward と関数 predict を dlnetwork オブジェクトと共に使用して、カスタム層の開発などの自動微分ワークフローで、これらの dlarray オブジェクトを操作できます。
次の表は、TransposedConvolution2DLayer オブジェクトでサポートされている入力形式、および対応する出力形式を示しています。nnet.layer.Formattable クラスを継承していないカスタム層、または Formattable プロパティが 0 (false) に設定された FunctionLayer オブジェクトに層の出力が渡される場合、その層は形式を整えていない dlarray オブジェクトを受け取り、この表に示された形式に従って次元が並べられます。
| 入力形式 | 出力形式 |
|---|---|
|
|
|
|
dlnetwork オブジェクトでは、TransposedConvolution2DLayer オブジェクトもこれらの入力形式と出力形式の組み合わせをサポートします。
| 入力形式 | 出力形式 |
|---|---|
|
|
|
|
参照
[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
バージョン履歴
R2017b で導入R2019a 以降では、既定で、Glorot 初期化子を使用してこの層の重みが初期化されます。この動作は、学習を安定化させるのに役立ち、通常は深いネットワークの学習時間を短縮します。
以前のリリースでは、既定で、平均 0、分散 0.01 の正規分布からサンプリングを行って、層の重みが初期化されます。この動作を再現するには、層の 'WeightsInitializer' オプションを 'narrow-normal' に設定します。
TransposedConvolution2DLayer の Cropping プロパティは削除される予定です。代わりに CroppingSize を使用してください。コードを更新するには、Cropping プロパティのすべてのインスタンスを CroppingSize に置き換えます。
1 Image credit: Convolution arithmetic (License)
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)