我一直看到在神经网络架构中有两个底部(源)或顶部(目的地)的caffe中的一些层,例如,这是Segnet数据层,它有两个顶部,数据和标签由相同的源文件在同一行img1.png lagel1.png
layer {
name: "data"
type: "Data"
top: "data"
top: "label"
dense_image_data_param {
source: "train.txt" # train file format img1.png img1.png (data and label)
batch_size: 1
shuffle: true
}
layer {
name: "loss"
type: "SoftmaxWithLoss"
bottom: "fc8_pascal"
bottom: "label"
}
layer {
name: "accuracy"
type: "Accuracy"
bottom: "fc8_pascal"
bottom: "label"
top: "accuracy"
include {
phase: TEST
}
}
有两个底部。
如果有人可以解释将这些含在一个层中的含义以及为什么不为每个层设置不同的层,我将不胜感激。 另一件事,如果一个图层将其自身称为顶部/底部,是否意味着它不会进行前向/后向计算?
答案 0 :(得分:2)
将图层视为数学运算:每个图层类型执行不同的操作。 "Convolution"
图层使用图层的内部参数对输入进行卷积,"ReLU"
执行线性校正等。
某些操作不需要任何输入("bottom"
s):这些通常是将数据/标签带入网络的输入层。
其他图层仅作用于单个操作数(一个"bottom"
)并输出单个结果(一个"top"
):"Convolution"
,"ReLU"
,"Softmax"
仅用于命名一些。
其他层可以产生若干输出(许多"top"
s),例如"Slice"
层
您还可以找到需要多个输入并生成单个输出的图层,例如"Eltwise"
图层。
底线,每层/操作需要不同数量的输入,并可能产生不同数量的输出。您不应混淆输入/输出blob和图层操作。
有关caffe的图层的更多信息,请访问caffe.help。