bcl*_*man 12 python machine-learning keras
我正在做有毒评论文本分类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'])
Run Code Online (Sandbox Code Playgroud)
我运行这一行:
model.fit(X_train, train_y, validation_split=0.5, epochs=3)
Run Code Online (Sandbox Code Playgroud)
并在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多少?
经过一番思考之后,我有点认为accuracy这里的指标只是看着我的模型以最高的置信度和比较与实际情况进行预测的类.
因此,如果我的模型输出[0, 0, 0.9, 0, 0, 0],它会将索引2('淫秽')的类与真值进行比较.你认为这是发生了什么吗?
谢谢你尽你所能的帮助!
对于多标签分类,我认为将其sigmoid用作激活和binary_crossentropy损失是正确的。
如果输出是稀疏的多标签,这意味着几个正标签而大多数是负标签,则accuracyKeras度量将被正确预测的负标签夸大。如果我没记错的话,Keras不会选择可能性最高的标签。相反,对于二进制分类,阈值为50%。因此预测将是[0, 0, 0, 0, 0, 1]。如果是实际的标签[0, 0, 0, 0, 0, 0],则准确度为5/6。您可以通过创建始终预测负标签并查看准确性的模型来检验此假设。
如果确实如此,您可以尝试使用其他指标,例如top_k_categorical_accuracy。
我能想到的另一种可能性是您的训练数据。标签y是否以某种方式“泄漏”到x中?只是一个疯狂的猜测。
您可以参考Keras Metrics 文档来查看所有可用的指标(例如binary_accuracy)。您还可以创建自己的自定义指标(并确保它完全符合您的预期)。我想确保神经突关于如何计算准确性是正确的,所以这就是我所做的(注意:)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
])
Run Code Online (Sandbox Code Playgroud)
运行训练,您将看到custom_acc始终等于binary_accuracy(因此也等于custom_acc)。
现在你可以参考Github上的Keras代码来看看它是如何计算的:
K.mean(K.equal(y_true, K.round(y_pred)), axis=-1)
Run Code Online (Sandbox Code Playgroud)
这证实了神经突所说的(即如果预测是[0, 0, 0, 0, 0, 1]并且实际标签是[0, 0, 0, 0, 0, 0],则准确性将是5/6)。
| 归档时间: |
|
| 查看次数: |
7177 次 |
| 最近记录: |