簡體   English   中英

Keras:如何計算多標簽分類的准確度?

[英]Keras: How is Accuracy Calculated for Multi-Label Classification?

我正在做有毒評論文本分類Kaggle挑戰。 有6個類: ['threat', 'severe_toxic', 'obscene', 'insult', 'identity_hate', 'toxic'] 注釋可以是這些類的多個,因此它是一個多標簽分類問題。

我用Keras建立了一個基本的神經網絡如下:

model = Sequential()
model.add(Embedding(10000, 128, input_length=250))
model.add(Flatten())
model.add(Dense(100, activation='relu'))
model.add(Dense(len(classes), activation='sigmoid'))
model.compile(loss='binary_crossentropy', optimizer='adam', metrics=['accuracy'])

我運行這一行:

model.fit(X_train, train_y, validation_split=0.5, epochs=3)

並在3個時期后獲得99.11%的准確率。

但是,99.11%的准確率比最好的Kaggle提交要好一點。 這讓我覺得我(或許兩者)a)過度擬合或b)濫用Keras的准確性。

1)當我使用50%的數據作為驗證分割並且只有3個時期時,似乎有點難以過度擬合。

2)這里的准確度只是模型得到每個類的正確時間的百分比嗎?

所以如果我輸出[0, 0, 0, 0, 0, 1]並且正確的輸出是[0, 0, 0, 0, 0, 0] 5/6 [0, 0, 0, 0, 0, 0] ,我的准確度將是5/6

經過一番思考之后,我認為這里的accuracy指標只是看着我的模型以最高的置信度和比較真實性來預測的類。

因此,如果我的模型輸出[0, 0, 0.9, 0, 0, 0] ,它會將索引2('淫穢')的類與真值進行比較。 你認為這是發生了什么嗎?

謝謝你盡你所能的幫助!

對於多標簽分類,我認為使用sigmoid作為激活並使用binary_crossentropy作為丟失是正確的。

如果輸出是稀疏的多標簽,意味着一些正標簽而大多數是負標簽,則Keras accuracy度量將被正確預測的負標簽覆蓋。 如果我沒記錯的話,Keras不會選擇概率最高的標簽。 相反,對於二進制分類,閾值為50%。 所以預測將是[0, 0, 0, 0, 0, 1] 如果實際標簽是[0, 0, 0, 0, 0, 0] 5/6 [0, 0, 0, 0, 0, 0] ,則精度為5/6 您可以通過創建始終預測負標簽並查看准確性的模型來測試此假設。

如果確實如此,您可以嘗試使用其他指標,例如top_k_categorical_accuracy

我能想到的另一個遙遠的可能性是你的訓練數據。 標簽是否以某種方式“泄露”到x? 只是一個瘋狂的猜測。

您可以參考Keras Metrics文檔以查看所有可用的指標(例如binary_accuracy)。 您還可以創建自己的自定義指標(並確保它完全符合您的預期)。 我想確保neurite對於如何計算准確性是對的,所以這就是我所做的(注意: activation="sigmoid" ):

from keras.metrics import binary_accuracy
def custom_acc(y_true, y_pred):
    return binary_accuracy(y_true, y_pred)

# ...

model.compile(loss="binary_crossentropy", optimizer=optimizer, metrics=[
    "accuracy",
    "binary_accuracy",
    "categorical_accuracy",
    "sparse_categorical_accuracy",
    custom_acc
])

運行,你會看到訓練custom_acc總是等於binary_accuracy (因此到custom_acc )。

現在你可以參考Github上的Keras代碼來看看它是如何計算的:

K.mean(K.equal(y_true, K.round(y_pred)), axis=-1)

這證實了神經元所說的(即如果預測是[0, 0, 0, 0, 0, 1] 0,0,0,0,0,1 [0, 0, 0, 0, 0, 1]並且實際標簽是[0, 0, 0, 0, 0, 0] 5/6 [0, 0, 0, 0, 0, 0] ,那么准確度將是5/6 )。

暫無
暫無

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

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