在Caffe的prototxt中,每个层都包含“top”或“bottom”参数来指定层之间的连接。但有时候,“top”是指该层本身(为什么要将其与自身链接?),或者存在多个“top”层。 “top”和“bottom”参数的确切含义以及使用它们的规则是什么?
这里有一个关于层和blob的混淆。
Caffe中,所有的数据都是以blob的形式表示。每个层接受零个或多个blobs,对它们进行转换,并发送零个或多个blobs。例如,ReLU层接受带有数据的单个blob,应用函数f(x) = x if x>0, 0 otherwise
,并将结果作为单个blob输出。用于分类问题的数据层通常具有两个输出blob,一个用于数据,另一个用于标签,没有输入blob。
blobs被视为从底部向上移动通过网络。因此,输入blob称为bottom blob,输出blob称为top blob。
现在,在prototxt定义中,name
属性存储层的名称。bottom
属性存储输入blob的名称。top
属性存储输出blob的名称,为了方便起见,通常取与层名称相同。如果该层有多个输入blobs,则有多个bottom
属性;如果有多个输出blobs,则有多个top
属性。
在Caffe中: