web-dev-qa-db-ja.com

Caffeのスケールレイヤー

深層残余ネットワークのCaffe prototxt を見て、"Scale"レイヤー。

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

ただし、このレイヤーは Caffeレイヤーカタログ では使用できません。誰かがこのレイヤーの機能とパラメーターの意味を説明したり、Caffeの最新のドキュメントを参照したりできますか?

16
Igor Ševo

Caffe here の詳細なドキュメントを見つけることができます。

具体的には、"Scale"レイヤーのドキュメント reads

2つの入力Blobの積を計算します。後者のBlobの形状は前者の形状に一致するように「ブロードキャスト」されます。後者のBlobを並べて、要素ごとの積を計算するのと同じです。
2番目の入力は省略できます。その場合、レイヤーのパラメーターとして学習されます。

あなたの場合、(単一の「下」)、この層は"res2b_branch2b"を乗算するためのスケール係数を学習しているようです。さらに、scale_param { bias_term: true }は、レイヤーが乗法的倍率だけでなく定数項も学習することを意味するためです。したがって、フォワードパスは以下を計算します。

res2b_branch2b <- res2b_branch2b * \alpha + \beta

トレーニング中、ネットは\alphaおよび\betaの値を学習しようとします。

18
Shai

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 {" always(?)は重みを指し、バイアスは2番目です(lr_multはScaleLayer固有ではありません)
  • フィラー:a "FillerParameter" [caffe.proto]を参照 省略された2番目のBLOBを埋める方法を示します。デフォルトは1つの定数「値:...」です。
  • bias_filler:オプションのバイアスBLOBを埋める方法を示すパラメーター
  • bias_term:バイアスblobがあるかどうか

すべてcaffe.protoから取得。そして:両方のフィラー値= 1.2で上のレイヤーのみをテストしました。

10
dasWesen