You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

基于Python的AI学习:多输出层深度学习模型的向量准确率验证

嘿,针对你这个多输出(3个神经元)模型的准确率验证需求,结合你用的Keras Sequential框架和sigmoid激活的情况,我给你整理几个实用的验证方法,适配不同的场景:

多输出模型的准确率验证方法

1. 样本级准确率(多标签场景首选)

如果你的任务是多标签分类(比如每个样本可以同时属于多个类别),样本级准确率能直观反映“整个样本的所有输出预测都和真实标签匹配”的比例。代码实现很简单:

import numpy as np

# 假设y_test是测试集真实标签(形状:(样本数, 3)),y_pred是模型预测结果(形状一致)
# 把sigmoid的连续输出转成二值标签(通常用0.5做阈值,可根据需求调整)
y_pred_binary = (y_pred > 0.5).astype(int)

# 检查每个样本的所有输出是否都匹配真实标签
sample_matches = np.all(y_pred_binary == y_test, axis=1)
# 计算样本级准确率
sample_accuracy = np.mean(sample_matches)
print(f"样本级准确率: {sample_accuracy:.4f}")

2. 类别级准确率(单独看每个输出神经元的表现)

如果你想单独评估每个输出神经元对应类别的预测效果(比如第一个神经元对应类别A的准确率,第二个对应B),可以逐个计算:

# 遍历3个输出类别
for class_idx in range(3):
    # 统计当前类别的预测正确数
    correct_predictions = np.sum(y_pred_binary[:, class_idx] == y_test[:, class_idx])
    # 计算当前类别的准确率
    class_accuracy = correct_predictions / len(y_test)
    print(f"类别{class_idx+1}的准确率: {class_accuracy:.4f}")

3. 用Keras内置/自定义指标快速评估

既然你用的是Keras,直接用框架自带的评估逻辑会更方便,还能和训练流程整合:

内置二分类准确率(适合多标签)

因为你用了sigmoid激活,每个输出都是独立的二分类任务,所以用binary_accuracy会很合适——它是所有输出神经元二分类准确率的平均值:

# 编译模型时指定指标
classifier.compile(optimizer='adam', loss='binary_crossentropy', metrics=['binary_accuracy'])

# 直接用evaluate方法评估测试集
test_loss, test_binary_acc = classifier.evaluate(X_test, y_test)
print(f"平均二分类准确率: {test_binary_acc:.4f}")

自定义样本级准确率指标

如果需要在Keras的评估流程里直接得到样本级准确率,可以自定义一个指标函数:

from tensorflow.keras import backend as K

def custom_sample_accuracy(y_true, y_pred):
    # 把预测值转成二值标签
    y_pred_binary = K.cast(K.greater(y_pred, 0.5), K.floatx())
    # 检查每个样本的所有输出是否匹配
    all_matches = K.all(K.equal(y_pred_binary, y_true), axis=1)
    # 返回样本级准确率的平均值
    return K.mean(K.cast(all_matches, K.floatx()))

# 编译时加入自定义指标
classifier.compile(optimizer='adam', loss='binary_crossentropy', 
                   metrics=['binary_accuracy', custom_sample_accuracy])

# 评估时获取三个结果:损失值、平均二分类准确率、样本级准确率
test_loss, test_binary_acc, test_sample_acc = classifier.evaluate(X_test, y_test)
print(f"样本级准确率: {test_sample_acc:.4f}")

4. 混淆矩阵(可视化每个类别的预测细节)

如果想更直观地看到每个类别的混淆情况(比如把类别1误判为类别2的次数),可以用混淆矩阵:

from sklearn.metrics import confusion_matrix
import matplotlib.pyplot as plt

# 以第一个类别为例,绘制混淆矩阵
cm = confusion_matrix(y_test[:, 0], y_pred_binary[:, 0])
plt.matshow(cm, cmap=plt.cm.Blues)
plt.title(f"类别1的混淆矩阵")
plt.colorbar()
plt.xlabel("预测标签")
plt.ylabel("真实标签")
plt.show()

你可以循环遍历3个类别,分别绘制每个类别的混淆矩阵,这样能清晰看到每个输出神经元的误判情况。

额外小提醒:激活函数和损失函数的匹配

最后补个重要的点:如果你的任务是多分类(每个样本只能属于一个类别),那你当前用的sigmoid激活其实不太合适,应该换成softmax,同时损失函数用categorical_crossentropy(记得把标签转成one-hot编码),这时候用categorical_accuracy来评估准确率会更合理。如果是多标签任务,那你现在的sigmoid+binary_crossentropy组合是完全正确的~

内容的提问来源于stack exchange,提问作者No1Lives4Ever

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.05.25 02:32:54