多标签文本分类中如何获取所有预测标签名称?
解决多标签文本分类的预测标签获取问题
你用np.argmax()的方式只适合单标签分类任务——它会直接取概率最高的单个标签,这和多标签任务的需求不符。多标签任务中每个标签是独立的二分类问题,模型输出的是每个标签的预测概率(通常用sigmoid激活),你需要通过设定阈值来筛选所有符合条件的标签。
修改后的代码示例
import numpy as np from keras.models import load_model model = load_model('/cnn.h5') CATEGORIES=['070.32', '070.33', '070.54', '155.0', '197.7', '271.0', '271.8', '275.1', '277.4', '289.81', '401.9', '452', '453.0', '511.89', '553.1', '567.23', '571.2', '571.42', '571.5', '571.6', '571.8', '572.2', '572.3', '572.4', '576.1', '578.9', '728.3', '751.61', '780.97', '782.3', '782.4', '786.3', '789.5', 'V70.8'] # 获取单个样本的所有标签预测概率 pred_probs = model.predict(x_test)[0] # 设定概率阈值(可根据任务调整,比如0.5) threshold = 0.5 # 筛选概率超过阈值的标签索引 selected_idx = np.where(pred_probs > threshold)[0] # 映射为对应的标签名称 Labels = [CATEGORIES[idx] for idx in selected_idx] print(Labels)
关键注意事项
- 模型结构验证:确保训练时模型输出层用的是
sigmoid激活函数,损失函数用binary_crossentropy——这是多标签任务的标准配置。如果之前用了softmax+categorical_crossentropy,模型本质是按单标签训练的,需要重新调整结构后再训练。 - 阈值调整:阈值0.5是通用值,你可以根据验证集的精确率、召回率需求,调整到更适合业务场景的数值(比如0.3或0.7)。
内容的提问来源于stack exchange,提问作者Raz
相关产品推荐
相关产品推荐

