当我按如下方式制作自定义损失函数时:(与 binary_crossentropy 相同)
def custom_loss(y_true, y_pred):
ce = K.mean(K.binary_crossentropy(y_true, y_pred), axis=-1)
return ce
keras/keras/losses.py 中的 binary_crossentropy 是:
def binary_crossentropy(y_true, y_pred):
return K.mean(K.binary_crossentropy(y_true, y_pred), axis=-1)
当我运行时:
model.compile(loss='binary_crossentropy', optimizer=optimizer, metrics=['accuracy'])
输出是正确的。
ETA: 6:20 - loss: 0.3697 - acc: 0.8343
如果我使用我的 custom_loss:
model.compile(loss=custom_loss, optimizer=optimizer, metrics=['accuracy'])
输出不正确:
ETA: 10:49 - loss: 0.7651 - acc: 0.0694
我们可以看到精度是不正确的。为什么??
最佳答案
这是造成loss="binary_crossentropy"
之间的准确度不一样的功能和自定义损失函数。
如果您设置 loss='binary_crossentropy'
, 公制 "acc"
与 'binary_accuracy'
相同.
但是您将自定义损失函数设置为您的代码,它与 'categorical_accuracy'
相同.
def binary_accuracy(y_true, y_pred):
return K.mean(K.equal(y_true, K.round(y_pred)), axis=-1)
def categorical_accuracy(y_true, y_pred):
return K.cast(K.equal(K.argmax(y_true, axis=-1),
K.argmax(y_pred, axis=-1)),
K.floatx())
因此,如果您获得相同的 acc 值,则在您的指标数组上指定 keras.metrics.binary_accuracy。
from keras.metrics import binary_accuracy
model.compile(loss=custom_loss,
metrics=[binary_accuracy])
关于python - Keras 中的自定义损失函数和输出精度不正确,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/51874760/