首页 文章

如何使用tensorflow softmax_cross_entropy_with_logits对类不 balancer 进行缩放和重新规范化输出

提问于
浏览
0

我想缩放模型输出并重新规范化它以处理类不 balancer 问题 . 例如,如果我有10个标签输出 y_logits 及其softmax y_pred 和之前的 p ,则新输出应为:

y_pred /= prior
y_pred /= sum(y_pred)

问题是张量流中的 softmax_cross_entropy_with_logits 函数采用logits y_logits 而我需要在 y_pred 上进行此缩放 . 任何想法如何在不实施交叉熵损失的情况下做到这一点?

1 回答

  • 0

    对于那些面临同样问题的人,我直接实现CE,因为它的等式表示 -∑ p_i log(q_i) 请查看tutorial .

    我用来应用先验的实现如下:

    def modified_CE(logits=None, labels=None, priors=None):
        # subtracting the maximum value to prevent inf results
        # you should change the shape of your logits based on your data
        scaled_logits = logits - tf.reshape(tf.reduce_max(logits,1),shape=(7500,1))
        # renormalize your logits as a finale step for the log softmax function
        normalized_logits = scaled_logits - tf.reshape(tf.reduce_logsumexp(scaled_logits,1),shape=(7500,1))
    
        # apply the priors
        normalized_logits -= tf.log(np.array(priors,dtype=np.float32))
        # renormalize 
        normalized_logits -= tf.reshape(tf.reduce_logsumexp(normalized_logits,1),shape=(7500,1))
    
        return tf.reduce_mean(-tf.reduce_sum(labels[0,:,:]*normalized_logits,1))
    

相关问题