2015-09-25 60 views
2

我有一个数据集,其中图像有变化标签数量。标签的数量在1到5之间。共有100个类别。Caffe:具有不同标签数量的多标签图像

谷歌搜索后,看起来像HDF5分贝层分贝可以处理多个标签,如下面的URL

唯一的问题是它假设有一个固定数量的标签。在此之后,我将不得不创造非标类一1×100矩阵,其中,项值为1的标记类,0,如以下定义:

layers { 
    name: "slice0" 
    type: SLICE 
    bottom: "label" 
    top: "label_matrix" 
    slice_param { 
     slice_dim: 1 
     slice_point: 100 
    } 
} 

其中每个图像包含AA标签找像(1,0,0,... 1,... 0,...,0,1),其中矢量大小为100维。

现在,我很抱歉,我的问题变得模糊,但这是一个可行的想法?也就是说,有更好的方法来解决这个问题吗?

回答

2

我知道你有5种类型的标签并不总是为每个数据点。 5个标签中的1个用于100路分类。正确到目前为止?

我建议总是将所有5个标签写入HDF5,并在标签丢失时使用特殊值。然后,您可以使用missing_value选项跳过为该迭代计算该层的损失。使用它需要将loss_param{ ignore_label = Y }添加到网络原型文件定义中的损失层,其中Y是标量。

反向传播的错误只会是存在的标签的函数。如果输入X对标签没有有效值,网络仍然会为该标签产生一个估计。但它不会因此而受到惩罚。产生输出对于该迭代中权重如何更新没有任何影响。只有非缺失标签的输出才会产生错误信号和重量梯度。

似乎只有Accuracy和SoftmaxWithLossLayer图层支持missing_values。

每个标签都是1x5矩阵。第一个条目可以用于100路分类(例如[0-99]),条目2:5的标量可以反映其他标签可以采用的值。列的顺序对于数据集中的所有条目都是相同的。缺少的标签由您选择的特殊值标记。这个特殊值必须位于有效标签值之外。这将取决于这些标签所代表的内容。如果标签值-1从不出现,则可以使用它来标记缺少的标签。

+0

您是否建议每张图片的标签可写为[5,10,25,32,91]?关于PO的问题,我只知道将第5,10,25,32和91st的标签向量写为100-dim向量的等价方法,其值为'1',其余为'0'。你可以提供任何参考吗?谢谢! – mintaka

+0

对不起,现在不认为我有参考。您可以将标签向量定义为长二进制代码,并使用sigmoidcrossentropy丢失图层。这将允许标签矢量中的两个类同时打开,或者为每个“类型”的标签定义一个损失层。这样你可以保持标量标签的值,而不必将它们转换成二进制向量并将它们连接起来。 – ypx