コンビネーションがどのように機能するかを直感的に説明するこの素晴らしいarticleを見つけました。Caffe convレイヤの重みとディメンション
形状の入力データ1×13×19×19、および128フィルタCONV層で:
layers {
name: "conv1_7x7_128"
type: CONVOLUTION
blobs_lr: 1.
blobs_lr: 2.
bottom: "data"
top: "conv2"
convolution_param {
num_output: 128
kernel_size: 7
pad: 3
weight_filler {
type: "xavier"
}
bias_filler {
type: "constant"
}
}
}
レイヤ今まさにカフェのCONV層の内部で何が起こっているかを理解しようと
私が正しく理解すれば、出力の形状は1 x 128 x 19 x 19です。
net->layers()[1]->blobs()
た層の重み形状をみる:フィルタ(128)当り面(13)ごとに7×7行列:
layer 1: type Convolution 'conv1_7x7_128'
blob 0: 128 13 7 7
blob 1: 128
はブロブ0ように見えるすべてのweigthsを有しています。
1 x 13 x 19 x 19のデータにブロブ0の畳み込みを行うと、正しく理解すれば128 x 13 x 19 x 19の出力になります(各7x7マトリックスは各ピクセルごとに1つの数値を生成するためパディングがあります)
128 x 13 x 19 x 19はレイヤーの128 x 19 x 19出力にどのように変換されますか?
ブロブ1の128個の重みは何ですか?
ボーナスの質問:blobs_lr
とは何ですか?
ボーナスの質問についての簡単なgoogleは私にCfを導いた。人々が学習率の2つの異なる戦略を使用する理由についてのMNISTtutorial: blobs_lrは、学習可能なパラメータの学習率調整です。この場合、ウェイト学習率は実行時にソルバーが与えた学習率と同じに設定し、バイアス学習率はその2倍に設定します。これは通常より良い収束率につながります。 https://github.com/BVLC/caffe/issues/913 – Eliethesaiyan