我有一个数据集,其中图片的标签数量为 VARYING 。标签的数量在1到5之间。有100个类。
在谷歌搜索后,似乎带有切片图层的HDF5数据库可以处理多个标签,如下面的URL所示。
唯一的问题是它设定了固定数量的标签。在此之后,我将不得不创建一个1x100矩阵,其中标记类的条目值为1,非标签类的条目值为0,如下面的定义所示:
layers {
name: "slice0"
type: SLICE
bottom: "label"
top: "label_matrix"
slice_param {
slice_dim: 1
slice_point: 100
}
}
其中每个图像包含一个看起来像(1,0,0,... 1,... 0,....,0,1)的标签,其中矢量大小为100维。
现在,我很抱歉我的问题变得模糊不清,但这是一个可行的想法吗?即,有没有更好的方法解决这个问题?
答案 0 :(得分: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永远不会发生,您可以使用它来标记缺少的标签。