簡體   English   中英

Keras中的自定義損失函數和輸出精度不正確

[英]Custom loss function in Keras and output accuracy is incorrect

當我按如下所示制作自定義損失函數時:(與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])

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM