运行《Scikit-Learn与TensorFlow机器学习实用指南》示例准确率无提升
问题原因定位
该问题和TensorFlow安装、环境配置无关,完全由代码逻辑错误导致。
具体错误代码
你错误对分类标签也执行了图像归一化的除以255操作:
# 错误写法:分类标签不需要归一化 y_valid, y_train = y_train_full[:5000] / 255.0, y_train_full[5000:] / 255.0
Fashion-MNIST的标签是取值为0~9的整数,对应10个不同的服饰类别,除以255后所有标签值被压缩到[0, 0.035]的浮点数区间,直接触发两个问题:
- 你使用的
sparse_categorical_crossentropy损失函数要求标签为整数类别索引,输入浮点数后损失计算逻辑完全失效,模型无法学习到正确的特征映射 - 所有标签值都小于1,准确率计算时永远只会和类别0的预测结果匹配,整体准确率始终在10分类随机猜测的10%(0.1)附近波动,和你观测到的0.0914结果完全吻合;同时模型只要将类别0的输出概率拉高就能得到极低的损失值,和你观测到的损失异常偏低的现象完全匹配。
修复方案
将标签处理代码修改为如下即可:
y_valid, y_train = y_train_full[:5000], y_train_full[5000:]
修改后重新训练即可达到书中给出的0.87左右的验证集准确率。
内容的提问来源于stack exchange,提问作者Petter_M
相关产品推荐
相关产品推荐

