このページの翻訳は最新ではありません。ここをクリックして、英語の最新版を参照してください。
transposedConv2dLayer
2 次元転置畳み込み層
構文
説明
2 次元転置畳み込み層では 2 次元の特徴マップがアップサンプリングされます。
この層は、間違って "逆畳み込み" 層または "deconv" 層と呼ばれることがあります。この層は、逆畳み込みを実行するのではなく、畳み込みの転置を実行します。
は、2 次元転置畳み込み層を返し、layer
= transposedConv2dLayer(filterSize
,numFilters
)FilterSize
プロパティおよび NumFilters
プロパティを設定します。
は、2 次元転置畳み込み層を返し、1 つ以上の名前と値のペアの引数を使用して追加のオプションを指定します。layer
= transposedConv2dLayer(filterSize
,numFilters
,Name,Value
)
例
転置畳み込み層の作成
高さと幅がそれぞれ 11 のフィルターを 96 個もつ転置畳み込み層を作成します。水平方向と垂直方向のストライドに 4 を使用します。
layer = transposedConv2dLayer(11,96,'Stride',4);
入力引数
filterSize
— フィルターの高さと幅
正の整数 | 2 つの正の整数のベクトル
フィルターの高さと幅。正の整数、または 2 つの正の整数から成るベクトル [h w]
として指定します。h
は高さ、w
は幅です。フィルターのサイズは、入力でニューロンが結合する局所領域のサイズを定義します。
filterSize
が正の整数の場合、ソフトウェアはどちらの次元についても同じ値を使用します。
例: [5 6]
は、高さと幅がそれぞれ 5
および 6
であるフィルターを指定します。
データ型: single
| double
| int8
| int16
| int32
| int64
| uint8
| uint16
| uint32
| uint64
numFilters
— フィルターの数
正の整数
フィルターの数。正の整数として指定します。この数値は、入力の同じ領域に結合する層のニューロンの数に対応します。このパラメーターは、層の出力におけるチャネル (特徴マップ) の数を決定します。
データ型: 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 次元転置畳み込み層を作成します。
Stride
— アップサンプリング係数
1
(既定値) | 2 つの正の整数のベクトル | 正の整数
入力のアップサンプリング係数。次のいずれかとして指定します。
2 つの正の整数から成るベクトル
[a b]
。a
は垂直方向のストライド、b
水平方向のストライドです。垂直方向および水平方向のストライドに対応する正の整数。
例: 'Stride',[2 1]
データ型: single
| double
| int8
| int16
| int32
| int64
| uint8
| uint16
| uint32
| uint64
Cropping
— 出力サイズの削減
0
(既定値) | "same"
| 非負の整数 | 2 つの非負の整数のベクトル
出力サイズの削減。次のいずれかとして指定します。
"same"
– 出力サイズがinputSize.*Stride
と等しくなるようにトリミングを設定します。ここで、inputSize
は層の入力の高さと幅です。Cropping
オプションを"same"
に設定した場合、層のCroppingMode
プロパティが自動的に'same'
に設定されます。可能な場合、上下および左右が同じ量だけトリミングされます。垂直方向のトリミング量が奇数の場合、下にある行が余分にトリミングされます。水平方向のトリミング量が奇数の場合、右にある列が余分にトリミングされます。
正の整数 – すべての端から指定された量のデータがトリミングされます。
非負の整数から成るベクトル
[a b]
- 上下の端からa
だけトリミングし、左右の端からb
だけトリミングします。ベクトル
[t b l r]
- 入力の上下左右からそれぞれt
、b
、l
、r
だけトリミングします。
Cropping
オプションを数値に設定した場合、層の CroppingMode
プロパティが自動的に 'manual'
に設定されます。
例: [1 2]
データ型: single
| double
| int8
| int16
| int32
| int64
| uint8
| uint16
| uint32
| uint64
| char
| string
NumChannels
— 入力チャネル数
"auto"
(既定値) | 正の整数
入力チャネル数。次のいずれかとして指定します。
"auto"
— 学習時に入力チャネルの数を自動的に決定します。正の整数 — 指定された数の入力チャネルの層を構成します。
NumChannels
と層入力データのチャネル数は一致しなければなりません。たとえば、入力が RGB イメージの場合、NumChannels
は 3 でなければなりません。入力が 16 個のフィルターをもつ畳み込み層の出力である場合、NumChannels
は 16 でなければなりません。
データ型: single
| double
| int8
| int16
| int32
| int64
| uint8
| uint16
| uint32
| uint64
| char
| string
WeightsInitializer
— 重みを初期化する関数
'glorot'
(既定値) | 'he'
| 'narrow-normal'
| 'zeros'
| 'ones'
| 関数ハンドル
重みを初期化する関数。次のいずれかに指定します。
'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
BiasInitializer
— バイアスを初期化する関数
'zeros'
(既定値) | 'narrow-normal'
| 'ones'
| 関数ハンドル
バイアスを初期化する関数。次のいずれかとして指定します。
'zeros'
— 0 でバイアスを初期化します。'ones'
— 1 でバイアスを初期化します。'narrow-normal'
— 平均 0、標準偏差 0.01 の正規分布から個別にサンプリングを行って、バイアスを初期化します。関数ハンドル — カスタム関数でバイアスを初期化します。関数ハンドルを指定する場合、関数は
bias = func(sz)
という形式でなければなりません。ここで、sz
はバイアスのサイズです。
この層では、Bias
プロパティが空の場合にのみバイアスが初期化されます。
データ型: char
| string
| function_handle
Weights
— 層の重み
[]
(既定値) | 数値配列
転置畳み込み演算で使用する層の重み。filterSize(1)
×filterSize(2)
×numFilters
×NumChannels
の数値配列、または []
として指定します。
層の重みは学習可能なパラメーターです。層の Weights
プロパティを使用して、重みに直接、初期値を指定できます。ネットワークに学習させるときに、層の Weights
プロパティが空ではない場合、trainNetwork
は Weights
プロパティを初期値として使用します。Weights
プロパティが空の場合、trainNetwork
は層の WeightsInitializer
プロパティによって指定された初期化子を使用します。
データ型: single
| double
Bias
— 層のバイアス
[]
(既定値) | 数値配列
転置畳み込み演算で使用する層のバイアス。1×1×numFilters
の数値配列、または []
として指定します。
層のバイアスは学習可能なパラメーターです。ニューラル ネットワークの学習時に、Bias
が空ではない場合、trainNetwork
は Bias
プロパティを初期値として使用します。Bias
が空の場合、trainNetwork
は BiasInitializer
によって指定された初期化子を使用します。
データ型: single
| double
WeightLearnRateFactor
— 重みの学習率係数
1
(既定値) | 非負のスカラー
重みの学習率係数。非負のスカラーとして指定します。
この係数にグローバル学習率が乗算されて、この層の重みの学習率が決定されます。たとえば、WeightLearnRateFactor
が 2
の場合、この層の重みの学習率は現在のグローバル学習率の 2 倍になります。関数 trainingOptions
で指定した設定に基づいて、グローバル学習率が決定されます。
データ型: single
| double
| int8
| int16
| int32
| int64
| uint8
| uint16
| uint32
| uint64
BiasLearnRateFactor
— バイアスの学習率係数
1
(既定値) | 非負のスカラー
バイアスの学習率係数。非負のスカラーとして指定します。
この係数にグローバル学習率が乗算されて、この層のバイアスの学習率が決定されます。たとえば、BiasLearnRateFactor
が 2
の場合、層のバイアスの学習率は現在のグローバル学習率の 2 倍になります。関数 trainingOptions
で指定した設定に基づいて、グローバル学習率が決定されます。
データ型: single
| double
| int8
| int16
| int32
| int64
| uint8
| uint16
| uint32
| uint64
WeightL2Factor
— 重みの L2 正則化係数
1 (既定値) | 非負のスカラー
重みの L2 正則化係数。非負のスカラーとして指定します。
この係数にグローバル L2 正則化係数が乗算されて、この層の重みの L2 正則化が決定されます。たとえば、WeightL2Factor
が 2
の場合、この層の重みの L2 正則化はグローバル L2 正則化係数の 2 倍になります。グローバル L2 正則化係数は、関数 trainingOptions
を使用して指定できます。
データ型: single
| double
| int8
| int16
| int32
| int64
| uint8
| uint16
| uint32
| uint64
BiasL2Factor
— バイアスの L2 正則化係数
0
(既定値) | 非負のスカラー
バイアスの L2 正則化係数。非負のスカラーとして指定します。
この係数にグローバル L2 正則化係数が乗算されて、この層のバイアスの L2 正則化が決定されます。たとえば、BiasL2Factor
が 2
の場合、この層のバイアスの L2 正則化はグローバル L2 正則化係数の 2 倍になります。関数 trainingOptions
で指定した設定に基づいて、グローバル L2 正則化係数が決定されます。
データ型: single
| double
| int8
| int16
| int32
| int64
| uint8
| uint16
| uint32
| uint64
Name
— 層の名前
''
(既定値) | 文字ベクトル | string スカラー
層の名前。文字ベクトルまたは string スカラーとして指定します。Layer
配列入力の場合、関数 trainNetwork
、assembleNetwork
、layerGraph
、および dlnetwork
は、名前が ''
の層に自動的に名前を割り当てます。
データ型: char
| string
出力引数
layer
— 2 次元転置畳み込み層
TransposedConvolution2DLayer
オブジェクト
2 次元転置畳み込み層。TransposedConvolution2DLayer
オブジェクトとして返されます。
アルゴリズム
2 次元転置畳み込み層
2 次元転置畳み込み層では 2 次元の特徴マップがアップサンプリングされます。
"標準の" 畳み込み演算は、入力にスライディング畳み込みフィルターを適用して入力を "ダウンサンプリング" します。入力と出力をフラット化することで、層の重みとバイアスから派生させることができる畳み込み行列 C とバイアス ベクトル B に関する畳み込み演算を として表すことができます。
同様に、"転置" 畳み込み演算は、入力にスライディング畳み込みフィルターを適用して入力を "アップサンプリング" します。スライディング フィルターを使用して入力をダウンサンプリングする代わりにアップサンプリングするには、対応するフィルターのエッジのサイズから 1 を減じたサイズのパディングを使用して、層の入力の各エッジを 0 でパディングします。
入力と出力をフラット化することで、転置畳み込み演算は と等価になります。ここで、C および B は、それぞれ、層の重みとバイアスから派生させ、標準の畳み込みで使用する畳み込み行列とバイアス ベクトルを表します。この処理は、標準の畳み込み層における逆方向関数と等価です。
次のイメージは、2 行 2 列の入力をアップサンプリングする 3 行 3 列のフィルターを示しています。下側のマップは入力を表し、上側のマップは出力を表します。 1
層の入力形式と出力形式
層配列内または層グラフ内の層は、書式化された dlarray
オブジェクトとして後続の層にデータを渡します。dlarray
オブジェクトの形式は文字列で、各文字はデータ内の対応する次元を表します。この形式には次の文字が 1 つ以上含まれています。
"S"
— 空間"C"
— チャネル"B"
— バッチ"T"
— 時間"U"
— 指定なし
たとえば、4 次元配列として表された 2 次元イメージ データがあり、最初の 2 つの次元がイメージの空間次元に対応し、3 番目の次元がイメージのチャネルに対応し、4 番目の次元がバッチ次元に対応している場合、このイメージ データは "SSCB"
(spatial、spatial、channel、batch) という書式で表されます。
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 Proceedings of the 2015 IEEE International Conference on Computer Vision, 1026–1034. Washington, DC: IEEE Computer Vision Society, 2015. https://doi.org/10.1109/ICCV.2015.123
拡張機能
C/C++ コード生成
MATLAB® Coder™ を使用して C および C++ コードを生成します。
使用上の注意および制限:
コード生成は、入力の非対称なトリミングをサポートしません。たとえば、
'Cropping'
パラメーターにベクトル[t b l r]
を指定して入力の上下左右をトリミングすることはできません。
GPU コード生成
GPU Coder™ を使用して NVIDIA® GPU のための CUDA® コードを生成します。
バージョン履歴
R2017b で導入R2019a: 既定の重みの初期化は Glorot
R2019a 以降では、既定で、Glorot 初期化子を使用してこの層の重みが初期化されます。この動作は、学習を安定化させるのに役立ち、通常は深いネットワークの学習時間を短縮します。
以前のリリースでは、既定で、平均 0、分散 0.01 の正規分布からサンプリングを行って、層の重みが初期化されます。この動作を再現するには、層の 'WeightsInitializer'
オプションを 'narrow-normal'
に設定します。
1 Image credit: Convolution arithmetic (License)
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)