Main Content

transposedConv1dLayer

1 次元転置畳み込み層

R2022a 以降

    説明

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

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

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

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

    すべて折りたたむ

    長さが 11 でストライドが 4 である 96 個のフィルターをもつ 1 次元転置畳み込み層を作成します。

    layer = transposedConv1dLayer(11,96,Stride=4)
    layer = 
      TransposedConvolution1DLayer with properties:
    
                Name: ''
    
       Hyperparameters
          FilterSize: 11
         NumChannels: 'auto'
          NumFilters: 96
              Stride: 4
        CroppingMode: 'manual'
        CroppingSize: [0 0]
    
       Learnable Parameters
             Weights: []
                Bias: []
    
    Use properties method to see a list of all properties.
    
    

    入力引数

    すべて折りたたむ

    フィルターの長さ。正の整数として指定します。フィルターのサイズは、入力でニューロンが結合する局所領域のサイズを定義します。

    データ型: 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 は対応する値です。名前と値の引数は他の引数の後に指定しなければなりませんが、ペアの順序は重要ではありません。

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

    転置畳み込み

    すべて折りたたむ

    入力のアップサンプリング係数。水平方向のストライドに対応する正の整数として指定します。

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

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

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

      可能な場合に、左右から同じ量がトリミングされます。水平方向のトリミング量が奇数の場合、右にある列が余分にトリミングされます。

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

    • 非負の整数から成るベクトル [l r] — 左と右からそれぞれ lr だけトリミングされます。

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

    データ型: 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*NumChannels および numOut = FilterSize*NumFilters です。

    • 'he' – He 初期化子[2]を使用して重みを初期化します。He 初期化子は、平均 0、分散 2/numIn の正規分布からサンプリングを行います。ここで、numIn = FilterSize*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×NumFilters×NumChannels の数値配列、または [] として指定します。

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

    データ型: single | double

    転置畳み込み演算で使用する層のバイアス。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 配列入力の場合、関数 trainnet および関数 dlnetwork は、名前が "" の層に自動的に名前を割り当てます。

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

    データ型: char | string

    出力引数

    すべて折りたたむ

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

    アルゴリズム

    すべて折りたたむ

    1 次元転置畳み込み層

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

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

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

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

    1 次元転置畳み込み層は、1 つの次元のみをアップサンプリングします。層がアップサンプリングする次元は、層の入力によって次のように異なります。

    • 時系列とベクトル シーケンスの入力 (チャネル、観測値、およびタイム ステップに対応する 3 次元のデータ) の場合、層は時間次元をアップサンプリングする。

    • 1 次元イメージ入力 (空間ピクセル、チャネル、および観測値に対応する 3 次元のデータ) の場合、層は空間次元をアップサンプリングする。

    • 1 次元イメージ シーケンス入力 (空間ピクセル、チャネル、観測値、およびタイム ステップに対応する 4 次元のデータ) の場合、層は空間次元をアップサンプリングする。

    層の入力形式と出力形式

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

    • "S" — 空間

    • "C" — チャネル

    • "B" — バッチ

    • "T" — 時間

    • "U" — 指定なし

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

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

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

    入力形式出力形式

    "SCB" (spatial、channel、batch)

    "SCB" (spatial、channel、batch)

    "CBT" (channel、batch、time)

    "CBT" (channel、batch、time)

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

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

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

    入力形式出力形式

    "SC" (spatial、channel)

    "SC" (spatial、channel)

    "CT" (channel、time)

    "CT" (channel、time)

    "SCT" (spatial、channel、time)

    "SCT" (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

    バージョン履歴

    R2022a で導入