如何使用"top"和"bottom"参数搭建网络架构

How to use "top" and "bottom" parameters to build network architecture

在 Caffe prototxt 中,每一层都包含 "top" 或 "bottom" 参数来指定层之间的连接。但是,有时会出现这样的情况,例如 "top" 是图层本身(为什么我们必须 link 它本身?)或者有多个 "top" 图层。 "top" 和 "bottom" 参数的确切含义及其使用规则是什么?

层和 blob 之间存在混淆。

在 Caffe 中,所有数据都以 blob 的形式表示。每层接收零个或多个 blob,对其进行转换,然后发送出零个或多个 blob。例如,ReLU 层接受带有数据的单个 blob,应用函数 f(x) = x if x>0, 0 otherwise,并将结果作为单个 blob 输出。用于分类问题的数据层通常有两个输出 blob,一个用于数据,另一个用于标签,没有输入 blob。

这些斑点被可视化,就好像它们从底部到顶部穿过网络一样。因此,输入 blob 称为底部 blob,输出 blob 称为顶部 blob。

现在,在 prototxt 定义中,name 属性存储层的名称。 bottom 属性存储输入 blob 的名称。 top属性存储输出blob的名称,为方便起见,一般取与层名称相同。如果该层有多个输入 blob,则有多个 bottom 属性,如果有多个输出 blob,则有多个 top 属性。

在咖啡中:

  1. 层之间链接的名称(top/bottom参数)非常重要。
  2. 一个层的外向链接为 "top",一个层的入向链接为 "bottom"。因此,一层的顶部作为底部连接到另一层。有点像两个城镇(层)之间的高速公路 (top/bottom)。 Caffe 根据 top/bottom 链接的名称确定网络结构。
  3. 层本身的名称远没有那么重要,并且不携带结构信息。你只需要这些是明智的和独特的。同一条高速公路承载两个城镇之间的交通,无论它们如何命名。
  4. Layers 和 top/bottom 的命名空间是分开的。因此,您可以将层命名为与顶部或底部相同的名称。这没有任何意义。但它很混乱,应该避免。