Caffe 中的缩放层

Scale layer in Caffe

我正在查看 Caffe prototxt for deep residual networks 并注意到 "Scale" 层的外观。

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

但是,此图层在 Caffe layer catalogue 中不可用。有人可以解释这一层的功能和参数的含义,或者指向 Caffe 的最新文档吗?

您可以在 caffe here 上找到详细的文档。

具体来说,对于 "Scale" 层文档 reads:

Computes a product of two input Blobs, with the shape of the latter Blob "broadcast" to match the shape of the former. Equivalent to tiling the latter Blob, then computing the elementwise product.
The second input may be omitted, in which case it's learned as a parameter of the layer.

看起来,在你的情况下,(单个 "bottom"),这一层学习了一个比例因子以乘以 "res2b_branch2b"。此外,由于 scale_param { bias_term: true } 意味着该层不仅学习乘法比例因子,而且学习常数项。因此,前向传播计算:

res2b_branch2b <- res2b_branch2b * \alpha + \beta

在训练期间,网络尝试学习 \alpha\beta 的值。

caffe.proto file里面也有关于它的一些文档,你可以搜索'ScaleParameter'。

非常感谢您的 post :) 比例图层正是我想要的。如果有人想要一个按标量 (0.5) 缩放的层的示例,然后 "adds" -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 - 关闭 "that param" 的学习 - 我认为 第一个 "param {" 总是(?)指的是权重,第二个是偏置(lr_mult 不是特定于 ScaleLayer 的)
  • filler: "FillerParameter" [see caffe.proto] 告诉如何填充省略的第二个 blob。默认为一个常量 "value: ...".
  • bias_filler: 告诉如何填充可选偏差 blob 的参数
  • bias_term:是否有偏差blob

全部取自caffe.proto。并且:我只测试了上面的层,两个填充值 = 1.2.