17

Caffe の prototxt で深い残差ネットワークを調べていると、レイヤーが表示されていることに気付きました"Scale"

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

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

4

2 に答える 2

19

Caffe に関する詳細なドキュメントは、こちらにあります。

具体的には、"Scale"レイヤーの場合、ドキュメントは次のように読み取ります

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

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

res2b_branch2b <- res2b_branch2b * \alpha + \beta

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

于 2016-05-24T11:27:58.210 に答える
10

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

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

于 2016-07-26T20:07:11.093 に答える