首页 > 解决方案 > 使用带有 keras 的自定义损失函数,准确度值不正确

问题描述

我正在尝试为tf.keras考虑输入特征的二进制分类问题实现自定义损失函数,这是我当前的版本:

def custom_loss(data, y_pred):

    y_true = data[:, -1]
    y_true = tf.reshape(y_true, [-1, 1])

    feature_1 = data[:,1]
    feature_2 = data[:,2]

    loss_bce = tf.maximum(y_pred,0)-y_pred * y_true + tf.math.log(1+tf.math.exp((-1)*tf.math.abs(y_pred)))

    return tf.reduce_mean(loss_bce, axis=-1) + 'terms with features'

history = model.fit(X_train, np.append(X_train, y_train, axis=1), epochs=5, batch_size=100, shuffle=False)

它完美地符合并运行良好的二进制交叉熵项,但是,准确性不正确,如下所示:

Epoch 1/5
823/823 [==============================] - 24s 29ms/step - loss: 0.7028 - accuracy: 0.1580 - val_loss: 0.6859 - val_accuracy: 0.1587
Epoch 2/5
823/823 [==============================] - 23s 29ms/step - loss: 0.6853 - accuracy: 0.1590 - val_loss: 0.6842 - val_accuracy: 0.1590
Epoch 3/5
823/823 [==============================] - 24s 29ms/step - loss: 0.6833 - accuracy: 0.1595 - val_loss: 0.6881 - val_accuracy: 0.1566
Epoch 4/5
823/823 [==============================] - 24s 29ms/step - loss: 0.6825 - accuracy: 0.1598 - val_loss: 0.6879 - val_accuracy: 0.1567
Epoch 5/5
823/823 [==============================] - 24s 29ms/step - loss: 0.6821 - accuracy: 0.1599 - val_loss: 0.6894 - val_accuracy: 0.1560

我想知道为什么损失看起来合理但准确性不合理?!

标签: tensorflowkerasloss-function

解决方案


推荐阅读