TensorFlow Dense全连接模型训练后训练集与测试集均输出相同固定值问题
二分类模型故障排查与修复方案
- 核心错误:输出层激活函数使用不当
softmax的作用是将多个输出值归一化为总和为1的概率分布,当输出层仅设置1个神经元时,无论输入值是什么,softmax的计算结果永远为1,这是你模型输出全1、训练精度恒定的根本原因。
二分类单神经元输出场景需将最后一层激活函数替换为sigmoid,同时可以给第一层全连接层增加激活函数提升拟合能力,修改后的模型结构如下:
model = tf.keras.Sequential([ keras.layers.Dense(13, activation='relu'), keras.layers.Dense(6, activation='sigmoid'), keras.layers.Dense(1, activation='sigmoid') ])
- 辅助优化点1:补充输入特征归一化
你的输入特征数值范围差异较大(年龄字段为几十的连续值,其余特征为0-3的离散值),未归一化会大幅拖慢模型收敛速度。建议使用StandardScaler对train_x、test_x做标准化处理,将所有特征缩放到均值为0、方差为1的分布。 - 辅助优化点2:排查类别不平衡问题
你当前的恒定精度0.5345恰好对应训练集中占比更高的类别比例,若数据集确实存在类别不平衡,可在调用model.fit()时传入class_weight参数,给占比更低的类别设置更高的损失权重,避免模型倾向于直接输出多数类结果。
按上述方案修改后重新训练,即可看到精度随epoch上升、输出结果为0-1之间的正常概率值。
内容的提问来源于stack exchange,提问作者Link An Jarad
相关产品推荐
相关产品推荐

