CNN未成年人识别训练准确率正常但未成年人样本预测成功率为0求助
问题排查及解决方案
1. 归一化尺度不一致(核心错误)
- 训练阶段:像素值归一化规则为
png = png/250.0 - 推理阶段:加载数据集内已做过归一化的样本后,又重复执行了
image = image/255.0,相当于像素值被压缩至训练阶段数值分布的1/255,完全偏离模型学习的特征区间,导致模型无法正常识别。
修复方案:推理阶段加载数据集内的样本时,不要重复做归一化;加载外部测试图片时,统一使用和训练阶段一致的归一化规则(除以250,而非255)。
2. 预测输入维度缺失
遍历young数据集做批量测试时,直接传入shape为(48,48,1)的png给model.predict(),缺少模型要求的batch维度,导致预测结果异常。
修复方案:预测前给样本增加batch维度,参考代码:
score += int(model.predict(np.expand_dims(png, axis=0))[0][0] > 0.5)
3. 分类阈值处理逻辑错误
Sigmoid层输出的是0-1之间的概率值,直接用int()转换的话,只要概率小于1都会被转为0,相当于所有概率在0.5-1区间的未成年人样本都会被错误判定为0。
修复方案:添加0.5分类阈值判断,概率大于等于0.5判定为未成年人(标签1),否则判定为成年人(标签0)。
4. 可选优化:模型结构冗余
第二层卷积层之后多添加了一组无前置卷积的BatchNormalization和Activation('relu')层,属于冗余结构,虽然不是本次问题的核心原因,但可以删除避免不必要的计算。
内容的提问来源于stack exchange,提问作者Ulto 4
相关产品推荐
相关产品推荐

