我正在使用原始的Python实现二元交叉熵损失函数,但与Tensorflow相比,结果差异很大。 这是我从Tensorflow得到的答案:
import numpy as np
from tensorflow.keras.losses import BinaryCrossentropy
y_true = np.array([1., 1., 1.])
y_pred = np.array([1., 1., 0.])
bce = BinaryCrossentropy()
loss = bce(y_true, y_pred)
print(loss.numpy())
输出:
>>> 5.1416497230529785
据我所知,二元交叉熵的公式如下:
我使用原生Python实现了相同的公式:
def BinaryCrossEntropy(y_true, y_pred):
m = y_true.shape[1]
y_pred = np.clip(y_pred, 1e-7, 1 - 1e-7)
# Calculating loss
loss = -1/m * (np.dot(y_true.T, np.log(y_pred)) + np.dot((1 - y_true).T, np.log(1 - y_pred)))
return loss
print(BinaryCrossEntropy(np.array([1, 1, 1]).reshape(-1, 1), np.array([1, 1, 0]).reshape(-1, 1)))
但是从这个函数中,我得到的损失值为:
>>> [[16.11809585]]
如何得到正确的答案?
np.clip
是不必要的。 - Maxim Egorushkin