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

如何构建输出布尔结果的机器学习模型?二分类网络相关问题咨询

输出转布尔值&准确率计算

你当前使用的sigmoid输出层是二分类任务的标准设计,神经网络本身不会直接输出布尔值,都是先输出属于正样本的概率(0-1区间),再通过阈值截断得到布尔分类结果。
你训练时看到的accuracy指标是Keras内部默认以0.5为阈值计算的,要自行获取布尔输出和手动计算准确率,可以用如下代码:

import numpy as np

# 推理得到概率输出
pred_probs = model.predict(test_images)
# 以0.5为阈值转布尔分类结果,可根据业务需求调整阈值
pred_labels = (pred_probs > 0.5).astype(bool)

# 手动计算测试集准确率,y_test为测试集真实0/1标签
test_acc = np.mean(pred_labels == y_test)
print(f"测试集准确率:{test_acc:.4f}")

如果你的数据集正负样本分布不均,0.5不一定是最优阈值,可以根据你对precision(查准率)、recall(查全率)的需求调整阈值,比如要尽可能少漏检正样本,可以把阈值调低到0.3~0.4区间。

现有模型优化建议

你当前的2D CNN结构可以适配曲线图像分类的需求,但存在参数量过大的问题,在样本量较少的情况下容易过拟合,可做如下调整:

  • 降低第一层卷积的核数量:输入尺寸为400800,第一层直接用512个55卷积核会导致参数量爆炸,建议降到64或128,逐层递增核数量,减少过拟合风险。
  • 处理样本不平衡:
    1. 训练时传入类别权重,自动平衡不同样本的损失贡献:
    from sklearn.utils.class_weight import compute_class_weight
    
    class_weights = compute_class_weight(
        class_weight='balanced',
        classes=np.unique(y_train.flatten()),
        y=y_train.flatten()
    )
    class_weight_dict = {i: class_weights[i] for i in range(len(class_weights))}
    # 训练时传入参数
    model.fit(..., class_weight=class_weight_dict)
    
    1. 不要只用准确率作为评估指标,补充precision、recall、F1、AUC等指标,避免样本不均导致的准确率虚高:
    from sklearn.metrics import classification_report, roc_auc_score
    
    print(classification_report(y_test, pred_labels))
    print(f"测试集AUC:{roc_auc_score(y_test, pred_probs):.4f}")
    

更适配的模型选型

如果你的原始数据就是x-y序列格式,不需要转成图像输入,直接用1D CNN处理序列数据效率更高、参数量更小,参考结构如下:

from tensorflow.keras import Sequential
from tensorflow.keras.layers import Conv1D, MaxPooling1D, Flatten, Dense, Dropout

model = Sequential()
# 输入shape为(序列长度, 2),2对应x、y两个特征
model.add(Conv1D(64, kernel_size=5, activation='relu', padding='same', input_shape=(seq_len, 2)))
model.add(Dropout(0.3))
model.add(MaxPooling1D())
model.add(Conv1D(32, kernel_size=5, activation='relu', padding='same'))
model.add(MaxPooling1D())
model.add(Flatten())
model.add(Dense(64, activation='relu'))
model.add(Dropout(0.3))
model.add(Dense(1, activation='sigmoid'))

如果曲线的形态特征非常依赖可视化的全局信息,继续用2D CNN的方案也完全可行,只要优化参数量即可。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.10.21 19:36:07