当样本的 labels 是多个独立的二分类问题时,loss 函数之前的激活函数应该是 sigmoid/tanh,而不能使用softmax了。如果激活函数是sigmoid,这种情况下我们的loss函数就是sigmoid_cross_entropy_with_logits。
Tensorflow中,logits都是指未经过激活函数的输出,即所谓的 unscaled。
sigmoid_cross_entropy_with_logits
具体实现参考官方文档。直接给出我用python实现的版本吧。
def my_binary_crossentropy(labels, output):
"""
binary crossentropy between an output tensor
and a target tensor.
"""
# transform back to logits
epsilon = 1e-08
np.clip(output, epsilon, 1.0 - epsilon,