caffe:具有两个损失层和两个不同标签集的 CNN

caffe: A CNN with two loss layers and two different label sets

我对具有两个损失层的深度 CNN 很感兴趣,每个损失层都有自己独立的标签集。例如,想象一个 10 层的 CNN,loss1 使用 label1 位于第 5 层,然后 loss2 使用 label2 在最后一层。

注意:label1(loss1)可以看作是预处理步骤,以减轻CNN解决label2(loss2即真实标签)的任务。

问题:据我所知,caffe损失层自动使用"label"(在我的.lmdb数据集中)。如何让它在 loss1 中使用 "label1" 并在 loss2 中使用 "label2"?

更新: 所以我采纳了 Shai 的建议使用 HDF5。这是我到目前为止的进展(只给出输入和输出层):

layer {
  name: "data"
  type: "HDF5Data"
  top: "data"
  top: "label1"
  top: "label2"
  include {
    phase: TEST
  }
  hdf5_data_param {
    source: "data/2048_1e3_0.00/2048_1e3_0.00_s_val_list.txt"
  }
}
layer {
  name: "data"
  type: "HDF5Data"
  top: "data"
  top: "label1"
  top: "label2"
  include {
    phase: TRAIN
  }
  hdf5_data_param {
    source: "data/2048_1e3_0.00/2048_1e3_0.00_s_train_list.txt"
  }

...

layer {
  name: "loss1"
  type: "EuclideanLoss"
  bottom: "ampl"
  bottom: "label1"
  top: "loss1"
}

...

layer {
  name: "loss2"
  type: "EuclideanLoss"
  bottom: "ampl"
  bottom: "label2"
  top: "loss2"
}

我的方向对吗?

AFAIK Caffe 在您的场景中使用 lmdb 存储二进制 Datums in lmdb. The way Datum is defined restricts it to a single integer label per input image. Therefore it can be very tricky to use "Data" 层。

另一方面,您可以使用 "HDF5Data" layer instead: this layer is much more flexible and can easily provide with more than a single label per input image. There are several examples here at SO on how to use this input layer, see, e.g.