convolution1dLayer
説明
1 次元畳み込み層は、1 次元入力にスライディング畳み込みフィルターを適用します。この層では、入力に沿ってフィルターを移動させ、重みと入力のドット積を計算し、バイアス項を加算することによって、入力を畳み込みます。
層が畳み込みを行う次元は、層の入力によって次のように異なります。
時系列とベクトル シーケンスの入力 (チャネル、観測値、およびタイム ステップに対応する 3 次元のデータ) の場合、層は時間次元で畳み込みます。
1 次元イメージ入力 (空間ピクセル、チャネル、および観測値に対応する 3 次元のデータ) の場合、層は空間次元で畳み込みます。
1 次元シーケンス入力 (空間ピクセル、チャネル、観測値、およびタイム ステップに対応する 4 次元のデータ) の場合、層は空間次元で畳み込みます。
作成
構文
説明
は、1 次元畳み込み層を作成し、layer = convolution1dLayer(filterSize,numFilters)FilterSize プロパティおよび NumFilters プロパティを設定します。
は、1 つ以上の名前と値の引数を使用して、オプションのプロパティを設定します。layer = convolution1dLayer(filterSize,numFilters,Name=Value)
入力引数
フィルターの幅。正の整数として指定します。
データ型: 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 は対応する値です。名前と値の引数は他の引数の後に指定しなければなりませんが、ペアの順序は重要ではありません。
例: convolution1dLayer(11,96,Padding=1) は、サイズが 11 である 96 個のフィルターをもつ 1 次元畳み込み層を作成し、層の入力の左右にサイズ 1 のパディングを指定します。
入力を走査するステップ サイズ。正の整数として指定します。
データ型: 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
入力に適用するパディング。次のいずれかとして指定します。
"same"— 出力のサイズがceil(inputSize/stride)となるようにパディングを適用します。ここで、inputSizeは入力の長さです。Strideが1の場合、出力のサイズは入力と同じになります。"causal"— 入力の左にパディングを適用します。これは(FilterSize - 1) .* DilationFactorと同じです。Strideが1の場合、出力のサイズは入力と同じになります。非負の整数
sz— サイズszのパディングを入力の両側に追加します。非負の整数のベクトル
[l r]— サイズがlのパディングを入力の左に追加し、サイズがrのパディングを入力の右に追加します。
例: Padding=[2 1] は、サイズが 2 のパディングを入力の左に追加し、サイズが 1 のパディングを入力の右に追加します。
データ型: single | double | int8 | int16 | int32 | int64 | uint8 | uint16 | uint32 | uint64 | char | string
パディングするデータの値。次のいずれかとして指定します。
PaddingValue | 説明 | 例 |
|---|---|---|
| スカラー | 指定したスカラー値でパディングします。 | |
"symmetric-include-edge" | 入力のミラーリングされた値を使用して、エッジの値を含めてパディングします。 | |
"symmetric-exclude-edge" | 入力のミラーリングされた値を使用して、エッジの値を除外してパディングします。 | |
"replicate" | 入力の繰り返し境界要素を使用してパディングします。 | |
データ型: 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 および trainNetwork は Weights プロパティを初期値として使用します。Weights プロパティが空の場合、ソフトウェアは層の WeightsInitializer プロパティによって指定された初期化子を使用します。
データ型: single | double
転置畳み込み演算で使用する層のバイアス。1 行 NumFilters 列の数値配列、または [] として指定します。
層のバイアスは学習可能なパラメーターです。ニューラル ネットワークの学習時に、Bias が空ではない場合、関数 trainnet および trainNetwork は Bias プロパティを初期値として使用します。Bias が空の場合、ソフトウェアは BiasInitializer によって指定された初期化子を使用します。
データ型: 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
プロパティ
畳み込み
この プロパティ は読み取り専用です。
フィルターの幅。正の整数として指定します。
データ型: 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は入力の長さです。Strideが1の場合、出力は入力と同じになります。'causal'– 因果的パディングを適用します。パディング サイズ(FilterSize - 1) .* DilationFactorを使用して入力の左にパディングします。
層のパディングを指定するには、名前と値の引数 Padding を使用します。
データ型: char
この プロパティ は読み取り専用です。
パディングするデータの値。次のいずれかとして指定します。
PaddingValue | 説明 | 例 |
|---|---|---|
| スカラー | 指定したスカラー値でパディングします。 | |
"symmetric-include-edge" | 入力のミラーリングされた値を使用して、エッジの値を含めてパディングします。 | |
"symmetric-exclude-edge" | 入力のミラーリングされた値を使用して、エッジの値を除外してパディングします。 | |
"replicate" | 入力の繰り返し境界要素を使用してパディングします。 | |
データ型: 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 プロパティが空の場合にのみバイアスが初期化されます。
Convolution1DLayer オブジェクトは、このプロパティを文字ベクトルまたは関数ハンドルとして格納します。
データ型: char | string | function_handle
転置畳み込み演算で使用する層の重み。FilterSize×NumChannels×numFilters の数値配列、または [] として指定します。
層の重みは学習可能なパラメーターです。層の Weights プロパティを使用して、重みの初期値を直接指定できます。ネットワークに学習させるときに、層の Weights プロパティが空でない場合、trainnet 関数は Weights プロパティを初期値として使用します。Weights プロパティが空の場合、ソフトウェアは層の WeightsInitializer プロパティによって指定された初期化子を使用します。
データ型: single | double
転置畳み込み演算で使用する層のバイアス。1 行 NumFilters 列の数値配列、または [] として指定します。
層のバイアスは学習可能なパラメーターです。ニューラル ネットワークに学習させるときに、Bias が空でない場合、trainnet 関数は Bias プロパティを初期値として使用します。Bias が空の場合、ソフトウェアは BiasInitializer によって指定された初期化子を使用します。
データ型: 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 個のフィルターをもつ 1 次元畳み込み層を作成します。
layer = convolution1dLayer(11,96);
Layer 配列に 1 次元畳み込み層を含めます。
layers = [
sequenceInputLayer(3,MinLength=20)
layer
reluLayer
globalMaxPooling1dLayer
fullyConnectedLayer(10)
softmaxLayer]layers =
6×1 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
アルゴリズム
1 次元畳み込み層は、1 次元入力にスライディング畳み込みフィルターを適用します。この層では、入力に沿ってフィルターを移動させ、重みと入力のドット積を計算し、バイアス項を加算することによって、入力を畳み込みます。
層が畳み込みを行う次元は、層の入力によって次のように異なります。
時系列とベクトル シーケンスの入力 (チャネル、観測値、およびタイム ステップに対応する 3 次元のデータ) の場合、層は時間次元で畳み込みます。
1 次元イメージ入力 (空間ピクセル、チャネル、および観測値に対応する 3 次元のデータ) の場合、層は空間次元で畳み込みます。
1 次元シーケンス入力 (空間ピクセル、チャネル、観測値、およびタイム ステップに対応する 4 次元のデータ) の場合、層は空間次元で畳み込みます。
層配列内または層グラフ内の層は、形式を整えた dlarray オブジェクトとして後続の層にデータを渡します。dlarray オブジェクトの形式は文字列で、各文字はデータ内の対応する次元を表します。この形式には次の文字が 1 つ以上含まれています。
"S"— 空間"C"— チャネル"B"— バッチ"T"— 時間"U"— 指定なし
たとえば、ベクトル シーケンス データを、最初の次元がチャネル次元に対応し、2 番目の次元がバッチ次元に対応し、3 番目の次元が時間次元に対応する 3 次元の配列として表すことができます。この表現は、"CBT" (channel、batch、time) の形式になります。
functionLayer オブジェクトを使用するか、関数 forward と関数 predict を dlnetwork オブジェクトと共に使用して、カスタム層の開発などの自動微分ワークフローで、これらの dlarray オブジェクトを操作できます。
次の表は、Convolution1DLayer オブジェクトでサポートされている入力形式、および対応する出力形式を示しています。ソフトウェアが nnet.layer.Formattable クラスを継承していないカスタム層、または Formattable プロパティが 0 (false) に設定された FunctionLayer オブジェクトに層の出力を渡す場合、その層は形式を整えていない dlarray オブジェクトを受け取り、この表に示された形式に従って次元が並べられます。ここには一部の形式のみを示します。層では、追加の "S" (空間) 次元または "U" (未指定) 次元をもつ形式など、追加の形式がサポートされている場合があります。
| 入力形式 | 出力形式 |
|---|---|
|
|
|
|
|
|
dlnetwork オブジェクトでは、Convolution1DLayer オブジェクトもこれらの入力形式と出力形式の組み合わせをサポートします。
| 入力形式 | 出力形式 |
|---|---|
|
|
|
|
|
|
参照
[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
拡張機能
使用上の注意および制限:
サードパーティのライブラリに依存しない汎用 C/C++ コードを生成し、生成されたコードをハードウェア プラットフォームに展開できます。
使用上の注意および制限:
深層学習ライブラリに依存しない CUDA コードを生成し、生成されたコードを NVIDIA® GPU プロセッサを使用するプラットフォームに展開できます。
バージョン履歴
R2021b で導入
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)