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"图层,文档读取

计算两个输入 Blob 的乘积,后者 Blob 的形状“广播”以匹配前者的形状。相当于平铺后一个 Blob,然后计算元素乘积。
第二个输入可以省略,在这种情况下,它被作为层的参数学习。

在您的情况下,(单个“底部”)似乎这一层学习了要乘以的比例因子"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”。

非常感谢您的帖子 :) Scale 层正是我想要的。如果有人想要一个按标量(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 {"总是(?)是指权重,第二个是偏差(lr_mult 不是 ScaleLayer 特定的)
  • Filler:一个“FillerParameter” [参见 caffe.proto],告诉如何填充省略的第二个 blob。默认值为一个常量“值:...”。
  • bias_filler:参数告诉如何填充可选的偏置 blob
  • bias_term:是否存在偏差 blob

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

于 2016-07-26T20:07:11.093 回答