13

Caffe prototxt for deep residual networksを見ていて、"Scale"レイヤーの外観に気付いています。Caffeのスケールレイヤー

layer { 
    bottom: "res2b_branch2b" 
    top: "res2b_branch2b" 
    name: "scale2b_branch2b" 
    type: "Scale" 
    scale_param { 
     bias_term: true 
    } 
} 

ただし、このレイヤーはCaffe layer catalogueでは使用できません。誰かがこの層の機能とパラメータの意味を説明したり、Caffeの最新のドキュメンテーションを指し示すことができますか?

答えて

15

caffe hereに関する詳細なドキュメントがあります。

すなわち、"Scale"層用DOC reads

は、前者の形状に一致するように、「放送」後者のブロブの形状で、二つの入力ブロブの積を計算します。後者のBLOBをタイリングするのと等価であり、次に要素ごとの積を計算する。
2番目の入力を省略することもできます。この場合、レイヤのパラメータとして学習されます。

あなたのケースでは(単一の「ボトム」)、このレイヤーは倍率が"res2b_branch2b"になるように見えます。さらに、scale_param { bias_term: true }は、レイヤが乗法スケーリング係数だけでなく定数項も学習することを意味します。だから、往路は計算:

res2b_branch2b <- res2b_branch2b * \alpha + \beta 

\alpha\betaの値を学ぶために、ネットの試行をトレーニング中。

+0

Shai、res2b_branch2bの後にフィルタサイズ1x1の1つの畳み込みレイヤーを置くのと同じです。これを行うと、出力はy = W * x + bとなり、Wとbを正しく学習するでしょうか?後者の最下層を提供していないときは、これはScale層と同じですか? – Dharma

+0

@Dharma 'x'が1Dの場合にのみ同等です。内積とスカラー乗算を混同しないでください。 – Shai

+0

よろしいですか?この場合、W行列全体ではなく、アルファベットとベータの2つのパラメータしか学習しません。私は正しい? – Dharma

7

caffe.proto fileにそれに関するドキュメントがあります。「ScaleParameter」を検索することができます。

あなたの投稿のためのヒープありがとう:)スケールレイヤーは私が探していたものでした。場合誰もがスカラー(0.5)によってスケーリングした後-2「追加」(およびこれらの値は変更されない)層のための例を望んでいる:

layer { 
    name: "scaleAndAdd" 
    type: "Scale" 
    bottom: "bot" 
    top: "scaled" 
    param { 
    lr_mult: 0 
    decay_mult: 0 
    } 
    param { 
    lr_mult: 0 
    decay_mult: 0 
    } 
    scale_param { 
    filler { 
     value: 0.5 } 
    bias_term: true 
    bias_filler { 
     value: -2 
    } 
    } 
} 

(おそらく、decay_mult年代にかかわらず、ここでは不要です。。しかし、知らんはコメントを参照してください)それ以外は :

  • lr_mult:0 - "そのPARAM" のための学習オフに - 私は(常に 最初"param {"を考える)の重みを指し、? 2番目にバイアスする(lr_multはScaleLayer固有ではない)
  • フィラー: "FillerParameter" [see caffe.proto]小刻みな2番目のblobの塗り方を指示します。デフォルトは1つの定数 "値:..."です。
  • bias_filler:caffe.protoから取られたすべてのバイアスブロブ

があるかどうか:パラメータは、オプションのバイアスブロブに

  • bias_termを埋めるためにどのように伝えます。そして:私は両方のフィラー値= 1.2で上記の層だけをテストしました。

  • +1

    dasWesenのみです。あなたはすでに重みと偏りの項を用意しています。そのため、lr_mult = 0を指定して学習する必要はなく、decay_mult = 0とすることで、ウェイトもペナルティする必要はありません。 – Dharma

    +0

    @Dharma:待って、編集の途中だったんだけど、結局decay_multは必要ないと思う。少なくともそのような追加の正規化項は、(損失)勾配の方向を変えない。これは、これらの項は定数なので、関与する変数(=位取りと偏り)は変更できないためです。しかし、decay_mult = 0の方が速く動作するかもしれません。 – dasWesen

    +0

    とにかく、Dharmaはdecay_multの役割について言及してくれました。 – dasWesen