【问题标题】:tensorflow - softmax ignore negative labels (just like caffe) [duplicate]tensorflow - softmax 忽略负标签(就像 caffe 一样)[重复]
【发布时间】:2016-12-29 16:58:31
【问题描述】:

在 Caffe 中,其 SoftmaxWithLoss 函数有一个选项可以在计算概率时忽略所有负标签 (-1),因此只有 0 或正标签概率加起来为 1。

Tensorflow softmax loss 有类似的功能吗?

【问题讨论】:

    标签: tensorflow caffe softmax


    【解决方案1】:

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

    在 caffe 语义上,Caffe 的 ignore_label 必须被视为“必须忽略的样本的标签”,因此它的效果是该 sampl_e 的梯度不会反向传播,这绝不是由使用一个热向量。

    一方面,我希望任何有意义的模型都能快速学会为该特定条目预测零值或足够小的值,因为所有样本在该特定条目中都将具有零,也就是说,由于该预测中的错误而反向传播的信息将相对快速地消失。

    另一方面,您需要注意,从数学的角度来看,caffe 的 ignore_label 和您所做的完全不同。

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

    【讨论】:

    • 我找到了另一个“解决方法”,这可能会起作用,因为它不会人为地将 -1 索引归零,而是只收集那些未索引的 -1:cls_score_x = tf.reshape( tf.gather(cls_soft,tf.where(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 是过滤后的 softmax 概率 (cls_score) 和标签 (labels_ind),没有 - 1
    【解决方案2】:

    刚刚想出了一个解决方法 --- 我使用 tf.one_hot 在标签索引上创建了一个单热张量(深度设置为标签数)。 tf.one_hot 自动将结果 one_hot 张量(形状 [batch, # of labels])中所有带有 -1 的索引归零

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

    【讨论】:

    • 我认为这个解决方案没有用。我最初认为这有效,因为它显示未标记样本的损失贡献为零。但我观察到该解决方案实际上使训练变得不稳定(在第二个 epoch 中损失猛增)。当我从训练批次中手动删除未标记的样本时,情况又稳定了。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2019-01-06
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多