Convolutionレイヤー(畳み込み層)
説明
入力値に対して畳み込み演算を行うレイヤーです。
畳み込みとは
畳み込みとはフィルタ(カーネル)を平行移動しながら入力データに重ね足し合わせる二項演算です。
畳み込みは画像解析において、画像の特長量を抽出する効果があります。
詳しくはこちらの記事を参照ください。
数式
1次元Convolutionの場合
2次元Convolutionの場合
(Oは出力、Iは入力、i,jはカーネルサイズ、x,y,nは入力のIndex、mは出力マップ(OutMapsプロパティ)、Wはカーネルの重み、bは各カーネルのバイアス項を示す)
プロパティ
KernelShape
畳み込むカーネルのサイズを指定します。
例えば画像に3(Height) × 5(Width)の2次元のカーネルを畳み込む場合「3,5」とします。
例えば1次元の時系列信号に7 tapのフィルタを畳み込む場合は「7」とします。
デフォルト値 = 3,3
WithBias
バイアス項(b)の有無を指定します。
デフォルト値 = True
- True:バイアス項(b)有り
- False:バイアス項(b)無し
OutMaps
畳み込むカーネルの数(=出力データ数)を指定します。
例えば入力に対して16種類のフィルタを畳み込む場合は「16」とします。
デフォルト値 = 16
BorderMode
畳み込みを行う範囲を指定します。
- valid:各軸の入力データサイズに対して、Kernel Shape分の畳み込みが可能な範囲で畳み込みを行います。この場合出力するデータの各軸のサイズは入力サイズ-Kernel Shape+1になります。
- full:各軸の入力データに対して、1サンプルでも畳み込みが可能な範囲で畳み込みを行います。足りない範囲のデータ(上下左右それぞれKernel Shape – 1)には0がPaddingされます。この場合出力するデータの各軸のサイズは入力サイズ+Kernel Shape-1になります。
- same:入力データと出力データのサイズが同じになるような範囲で畳み込みを行います。足りない範囲のデータ(上下左右それぞれKernel Shape/2 – 1)には0がPaddingされます。
デフォルト値 = same
Padding
畳み込み処理前に配列の端にゼロを追加するサイズを指定します。例えば画像の上下方向に3ピクセル、左右に2ピクセルを挿入するには「3,2」とします。
*ConvolutionPaddingSize:PaddingにBorderModeから算出される値を用います。
デフォルト値 = *ConvolutionPaddingSize
Strides
カーネルの畳み込みを何サンプル毎に行うかを指定します。
1以外のStrideを指定した軸の出力サイズは、指定した値でダウンサンプリングされます。
例えば画像のX軸方向には2毎サンプル毎、Y軸方向には3サンプル毎に畳み込みを行う場合は「3,2」とします。
デフォルト値 = 1,1
Dilation
カーネルを広げる倍率をカーネルに対するStrideの値で指定します。
例えば3(Height)x5(Width)の2次元のカーネルをHeight3倍、Width2倍に広げ、7×9の範囲に対してConvolutionを行う場合は「3,2」とします。
デフォルト値 = 1,1
Group
OutMapsをグルーピングする単位を指定します。
デフォルト値 = 1
ParameterScope
このレイヤーで用いるパラメータの名前を指定します。
同じParameterScopeの指定されたレイヤーの間ではパラメータが共有されます。
デフォルト値 = *Name
W.File
プリトレーニング(事前学習)された重みWを用いる場合に、Wの書かれたファイルを絶対パスで指定します。
Fileが指定されており重みWをファイルから読み込む場合、Initializerによる初期化は無効になります。
デフォルト値 = ブランク
W.Initializer
重みWの初期化方法を指定します。
デフォルト値 = NormalAffineGlorot
- Uniform:-1.0~1.0の一様乱数で初期化します
- UniformAffineGlorot:一様乱数にXavier Glorot提案の 係数をかけて初期化します
- Normal:平均0.0、分散1.0であるガウス乱数で初期化します
- NormalAffineHeForward:ガウス乱数にKaiming He提案の係数をかけて初期化します(Forward Case)
- NormalAffineHeBackward:ガウス乱数にKaiming He提案の係数をかけて初期化します(Backward Case)
- NormalAffineGlorot:ガウス乱数にXavier Glorot提案の 係数をかけて初期化します
- Constant:全ての要素を一定値(1.0)で初期化します
W.InitializerMultiplier
W.Initializerにより生成した値に対して掛ける係数を指定します。
デフォルト値 = 1
W.LRateMultiplier
コンフィグタブで指定したLearning Rateに対し、重みWの更新に用いるLearning Rateの倍率を指定します。
例えばコンフィグタブで指定したLearning Rateが0.01の状態でW.LRateMultiplierを2とした場合、重みWはLearning Rate0.02で更新されます。
デフォルト値 = 1
b.File
プリトレーニング(事前学習)されたバイアス項bを用いる場合に、bの書かれたファイルを絶対パスで指定します。
Fileが指定されておりバイアス項bをファイルから読み込む場合、Initializerによる初期化は無効になります。
デフォルト値 = ブランク
b.Initializer
バイアス項bの初期化方法を指定します。
デフォルト値 = NormalAffineGlorot
- Uniform:-1.0~1.0の一様乱数で初期化します
- UniformAffineGlorot:一様乱数にXavier Glorot提案の 係数をかけて初期化します
- Normal:平均0.0、分散1.0であるガウス乱数で初期化します
- NormalAffineHeForward:ガウス乱数にKaiming He提案の係数をかけて初期化します(Forward Case)
- NormalAffineHeBackward:ガウス乱数にKaiming He提案の係数をかけて初期化します(Backward Case)
- NormalAffineGlorot:ガウス乱数にXavier Glorot提案の 係数をかけて初期化します
- Constant:全ての要素を一定値(1.0)で初期化します
b.InitializerMultiplier
b.Initializerにより生成した値に対して掛ける係数を指定します。
デフォルト値 = 1
b.LRateMultiplier
コンフィグタブで指定したLearning Rateに対し、バイアス項bの更新に用いるLearning Rateの倍率を指定します。
例えばコンフィグタブで指定したLearning Rateが0.01の状態でb.LRateMultiplierを2とした場合、バイアス項bはLearning Rate0.02で更新されます。
デフォルト値 = 1
出力サイズ
Strides数, (入力のwidth + Padding) / Stridesのx軸, (出力のheight + Padding) / Stridesのy軸
※ 端数はBorderModeの指定に応じて調整
利用用途
CNNの畳み込み層で用います。
CNNの基幹となるレイヤーです。
サンプル構成
CNN(畳み込みニューラルネットワーク)
CNNについての詳しいことはこちら↓↓↓
![]() |
【送料無料】 ソニー開発のNeural Network Console入門 増補改訂・クラウド対応版--数式なし、コーディングなしのディープラーニング / 足立悠 【本】 価格:2,592円 |