python - Keras 中的自定义损失函数和输出精度不正确

标签 python tensorflow keras

当我按如下方式制作自定义损失函数时:(与 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/

相关文章:

Python 为图像添加一个 channel

python - 简单的单层神经网络

python - Flask,在 View 之间传递用户输入的数据

python - 如何使 Twisted 应用程序处理 SIGTERM?

python - 如何将 numpy 数组列表放入 LSTM 神经网络?

tensorflow - 如何获取当前的TensorFlow名称范围

python索引错误: index 3 is out of bounds for axis 0 with size 3

python - 定义 OrderedDict 时出错 - ValueError : too many values to unpack

python - 将tensorflow .pb模型转换为.mlmodel时出错

python - 使用 Python Keras 训练 CNN 1D 时出现 AttributeError