多标签分类的二元交叉熵可以由以下损失函数定义:
为什么kerasbinary_crossentropy
损失函数返回不同的值?他们下面的公式是什么?我试图阅读源代码,但它并不容易理解。
更新
给出与 Keras 大致相同结果的代码:
import keras.backend as K
def binary_crossentropy(y_true, y_pred):
result = []
for i in range(len(y_pred)):
y_pred[i] = [max(min(x, 1 - K.epsilon()), K.epsilon()) for x in y_pred[i]]
result.append(-np.mean([y_true[i][j] * math.log(y_pred[i][j]) + (1 - y_true[i][j]) * math.log(1 - y_pred[i][j]) for j in range(len(y_pred[i]))]))
return np.mean(result)