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 存储二进制 Datum
s 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. 。
我对具有两个损失层的深度 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 存储二进制 Datum
s 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.