神经网络多分类文本任务中如何获取新样本的类别预测结果?
多分类文本预测结果处理方案
1. 先搞懂当前输出的含义
你拿到的数组是模型输出的原始预测值(logits),因为模型最后一层Dense(10)没加激活函数,且训练时用了BinaryCrossentropy(from_logits=True)。这里要提一句:你的任务是多分类,但当前用的二分类损失函数其实不对,不过先解决单样本预测的问题,后面再讲优化。
2. 把原始值转成类别概率
用Softmax函数可以把logits转换成0-1之间的概率值,所有类别概率加起来等于1。代码示例:
import tensorflow as tf # 假设model.predict(x_single)得到的结果是logits数组 logits = model.predict(x_single) # 转换为概率 probabilities = tf.nn.softmax(logits).numpy()
probabilities里的每个元素对应一个类别的概率,数值越大,该类别的可能性越高。
3. 提取最终分类结果
取概率数组里最大值对应的索引,就是预测的类别:
# 获取概率最大的类别索引 predicted_class_idx = tf.argmax(probabilities, axis=1).numpy()[0]
如果你的类别有对应名称(比如类别0对应"科技"、类别1对应"娱乐"),可以提前做个映射列表:
class_names = ["类别0", "类别1", "类别2", ..., "类别9"] # 按哑变量的顺序对应 predicted_class = class_names[predicted_class_idx]
4. 优化模型训练配置(更规范的做法)
因为是多分类且标签是哑变量,建议调整模型配置:
- 最后一层加上Softmax激活:
layers.Dense(10, activation='softmax') - 编译时改用多分类专用损失函数:
model.compile( loss=losses.CategoricalCrossentropy(), optimizer='adam', metrics=['categorical_accuracy'] )
调整后模型直接输出概率,预测时可以直接用argmax取类别,不用额外转Softmax。
内容的提问来源于stack exchange,提问作者Chandra
相关产品推荐
相关产品推荐

