【发布时间】:2018-09-06 03:17:06
【问题描述】:
我有兴趣拥有一个具有两个损失层的深度 CNN,每个损失层都有自己独立的标签集。例如,假设一个 10 层的 CNN,loss1 使用 label1 位于第 5 层,然后 loss2 使用 label2 位于最后一层。
注意:label1(loss1)可以被认为是预处理步骤,以减轻 CNN 解决 label2(loss2 即真实标签)的任务。
问题:据我所知,caffe 损失层自动使用“标签”(在我的 .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"
}
我的方向正确吗?
【问题讨论】:
-
感谢谢。您提供的“此答案”链接并未解决有关使用多个标签使用多个损失的问题。所以我决定通过“更新”让我的问题更清楚。另外,我提供了一部分代码,询问我是否应该这样做。这有什么问题?
-
答案 I linked to 展示了如何为 caffe 创建 HDF5 数据。您应该修改它有多个标签,而不仅仅是
X和Y。是的,你所采取的方向似乎导致了一个很好的解决方案。 -
感谢您的帮助。
标签: neural-network deep-learning caffe conv-neural-network pycaffe