2016-08-23 45 views

回答

3

刚刚想出了一个解决办法---我使用tf.one_hot(标签的深度设置)在标签索引上创建了一个单热张量。 tf.one_hot在结果one_hot张量(形状[批量,标签数量])中自动清零所有具有-1的索引

这使softmax损失(即tf.nn.softmax_cross_entropy_with_logits)“忽略”所有-1标签。

+0

我不认为这个解决方案是有用的。我最初认为这是有效的,因为它显示未标记样本的损失贡献为零。但我观察到,解决方案实际上使训练不稳定(在第二个时期通过屋顶丢失射门)。当我手动从培训批次中移除未标记的样本时,事情再次稳定下来。 – mikkola

2

我不太确定您的解决方法是否真的有效。

Caffe的ignore_label在caffe语义上必须被认为是“必须被忽略的样本的标签”,因此它具有作为该sampl_e的梯度不反向传播的效果,这绝不是由使用一个热矢量。一方面,我期望任何有意义的模型能够快速学会为特定条目预测一个零值或足够小的值,因为所有样本在该特定条目中都将具有零,所以可以这么说,由于该预测中的错误而导致的反向传播信息将相对快速地消失。

另一方面,你需要知道,从数学的角度来看,caffe的ignore_label和你在做什么是完全不同的。

说到这里,我是TF新手,需要与caffe的ignore_label完全相同的功能。

+1

我发现了另一个“解决方法”,这可能会起作用,因为它不会人为地将-1索引归零,而只会收集那些未索引为-1的索引:cls_score_x = tf.reshape(tf.gather(cls_soft,tf (tf.not_equal(labels_ind,-1))),[ - 1,2]) label_x = tf.reshape(tf.gather(labels_ind,tf.where(tf.not_equal(labels_ind,-1))) ,[ - 1]) loss_cls = tf.reduce_mean(tf.nn.sparse_softmax_cross_entropy_with_logits(cls_score_x,label_x)),其中cls_score_x和label_x是没有-1的滤波的softmax probs(cls_score)和标签(labels_ind) –