Main Content

このページの内容は最新ではありません。最新版の英語を参照するには、ここをクリックします。

convolution1dLayer

1 次元畳み込み層

R2021b 以降

    説明

    1 次元畳み込み層は、1 次元入力にスライディング畳み込みフィルターを適用します。この層では、入力に沿ってフィルターを移動させ、重みと入力のドット積を計算し、バイアス項を加算することによって、入力を畳み込みます。

    層が畳み込みを行う次元は、層の入力によって次のように異なります。

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

    • 1 次元イメージ入力 (空間ピクセル、チャネル、および観測値に対応する 3 次元のデータ) の場合、層は空間次元で畳み込みます。

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

    作成

    説明

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

    layer = convolution1dLayer(filterSize,numFilters,Name=Value) は、さらに、1 つ以上の名前と値の引数を使用して、オプションの StrideDilationFactorNumChannelsパラメーターと初期化学習率および正則化、および Name プロパティを設定します。入力のパディングを指定するには、名前と値の引数 Padding を使用します。たとえば、convolution1dLayer(11,96,Padding=1) は、サイズが 11 である 96 個のフィルターをもつ 1 次元畳み込み層を作成し、層の入力の左右にサイズ 1 のパディングを指定します。

    入力引数

    すべて展開する

    名前と値の引数

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

    例: convolution1dLayer(11,96,Padding=1) は、サイズが 11 である 96 個のフィルターをもつ 1 次元畳み込み層を作成し、層の入力の左右にサイズ 1 のパディングを指定します。

    入力に適用するパディング。次のいずれかとして指定します。

    • "same" — 出力のサイズが ceil(inputSize/stride) となるようにパディングを適用します。ここで、inputSize は入力の長さです。Stride1 の場合、出力のサイズは入力と同じになります。

    • "causal" — 入力の左にパディングを適用します。これは (FilterSize - 1) .* DilationFactor と同じです。Stride1 の場合、出力のサイズは入力と同じになります。

    • 非負の整数 sz — サイズ sz のパディングを入力の両側に追加します。

    • 非負の整数のベクトル [l r] — サイズが l のパディングを入力の左に追加し、サイズが r のパディングを入力の右に追加します。

    例: Padding=[2 1] は、サイズが 2 のパディングを入力の左に追加し、サイズが 1 のパディングを入力の右に追加します。

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

    プロパティ

    すべて展開する

    畳み込み

    この プロパティ は読み取り専用です。

    フィルターの幅。正の整数として指定します。

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

    この プロパティ は読み取り専用です。

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

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

    入力を走査するステップ サイズ。正の整数として指定します。

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

    膨張畳み込み (Atrous 畳み込みとも呼ばれる) の係数。正の整数として指定します。

    膨張畳み込みを使用して、パラメーターの数や計算量を増やさずに、層の受容野 (層で確認できる入力の領域) を増やすことができます。

    各フィルター要素間にゼロを挿入すると、層のフィルターが拡張されます。膨張係数は、入力のサンプリングのステップ サイズ、またはこれと等価であるフィルターのアップサンプリング係数を決定します。これは、有効なフィルター サイズ (FilterSize – 1) .* DilationFactor + 1 に相当します。たとえば、膨張係数 2 の 1 行 3 列のフィルターは、要素間にゼロが挿入された 1 行 5 列のフィルターと等価です。

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

    入力の各側面に適用するパディングのサイズ。2 つの非負の整数のベクトル [l r] として指定します。l は左に適用されるパディング、r は右に適用されるパディングです。

    層の作成時に、名前と値の引数 Padding を使用してパディングのサイズを指定します。

    データ型: double

    この プロパティ は読み取り専用です。

    パディングのサイズを決定する方法。次のいずれかとして指定します。

    • 'manual'Padding で指定された整数またはベクトルを使用してパディングします。

    • 'same' – 出力のサイズが ceil(inputSize/Stride) となるようにパディングを適用します。ここで、inputSize は入力の長さです。Stride1 の場合、出力は入力と同じになります。

    • 'causal' – 因果的パディングを適用します。パディング サイズ (FilterSize - 1) .* DilationFactor を使用して入力の左にパディングします。

    層のパディングを指定するには、名前と値の引数 Padding を使用します。

    データ型: char

    この プロパティ は読み取り専用です。

    パディングするデータの値。次のいずれかとして指定します。

    PaddingValue説明
    スカラー指定したスカラー値でパディングします。

    [314][0031400]

    'symmetric-include-edge'入力のミラーリングされた値を使用して、エッジの値を含めてパディングします。

    [313][1331441]

    'symmetric-exclude-edge'入力のミラーリングされた値を使用して、エッジの値を除外してパディングします。

    [314][4131413]

    'replicate'入力の繰り返し境界要素を使用してパディングします。

    [313][3331444]

    データ型: 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×NumChannels×numFilters の数値配列、または [] として指定します。

    層の重みは学習可能なパラメーターです。層の 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 配列入力の場合、関数 trainnettrainNetworkassembleNetworklayerGraph、および dlnetwork は、名前が "" の層に自動的に名前を割り当てます。

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

    データ型: char | string

    この プロパティ は読み取り専用です。

    層への入力の数。1 として返されます。この層は単一の入力のみを受け入れます。

    データ型: double

    この プロパティ は読み取り専用です。

    入力名。{'in'} として返されます。この層は単一の入力のみを受け入れます。

    データ型: cell

    この プロパティ は読み取り専用です。

    層からの出力の数。1 として返されます。この層には単一の出力のみがあります。

    データ型: double

    この プロパティ は読み取り専用です。

    出力名。{'out'} として返されます。この層には単一の出力のみがあります。

    データ型: cell

    すべて折りたたむ

    幅が 11 である 96 個のフィルターをもつ 1 次元畳み込み層を作成します。

    layer = convolution1dLayer(11,96)
    layer = 
      Convolution1DLayer with properties:
    
                  Name: ''
    
       Hyperparameters
            FilterSize: 11
           NumChannels: 'auto'
            NumFilters: 96
                Stride: 1
        DilationFactor: 1
           PaddingMode: 'manual'
           PaddingSize: [0 0]
          PaddingValue: 0
    
       Learnable Parameters
               Weights: []
                  Bias: []
    
    Use properties method to see a list of all properties.
    
    

    Layer 配列に 1 次元畳み込み層を含めます。

    layers = [
        sequenceInputLayer(3,MinLength=20)
        convolution1dLayer(11,96)
        reluLayer
        globalMaxPooling1dLayer
        fullyConnectedLayer(10)
        softmaxLayer
        classificationLayer]
    layers = 
      7x1 Layer array with layers:
    
         1   ''   Sequence Input           Sequence input with 3 dimensions
         2   ''   1-D Convolution          96 11 convolutions with stride 1 and padding [0  0]
         3   ''   ReLU                     ReLU
         4   ''   1-D Global Max Pooling   1-D global max pooling
         5   ''   Fully Connected          10 fully connected layer
         6   ''   Softmax                  softmax
         7   ''   Classification Output    crossentropyex
    

    アルゴリズム

    すべて展開する

    参照

    [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

    バージョン履歴

    R2021b で導入