TensorFlow模型加载后精度骤降问题求助:基于Fashion-MNIST训练
问题排查与解决方案
首先,我注意到你代码里的模型保存路径可能是导致精度暴跌的核心问题——你在MODELFILENAME后面加了系统路径分隔符sep,这会干扰TensorFlow的模型保存/加载逻辑。
核心问题分析
TensorFlow的model.save()函数接收的目录名不需要末尾的路径分隔符(比如Windows的\或Linux的/)。当你使用'TF_ZTH_02_model' + sep作为保存路径时,可能会导致模型文件没有被完整写入目标目录,或者后续加载时读取到不完整/损坏的模型文件。第一次训练后测试精度正常是因为你直接使用了内存中训练好的模型,而非加载保存后的文件;第二次加载的是有问题的保存模型,自然精度骤降。
修复步骤
- 修改模型保存路径,去掉末尾的
sep:MODELFILENAME = 'TF_ZTH_02_model' # 移除末尾的路径分隔符 - 删除之前保存的错误模型目录(如果存在),避免加载旧的损坏文件。
- 重新运行代码:第一次训练完成后,模型会被正确保存到
TF_ZTH_02_model目录;第二次运行时加载这个完整模型,测试精度应该和第一次一致。
额外验证建议
为了彻底确认问题,你可以添加一些验证步骤:
- 在加载模型后、评估前,打印测试集的最大值,确认数据是正确归一化到0-1范围的:
print("Test data max value:", testimages.max()) # 正常应该输出1.0 - 检查TensorFlow版本:确保保存模型和加载模型时使用相同的TensorFlow版本,避免SavedModel格式兼容性问题。
小优化建议(非精度问题,但更规范)
虽然不是导致精度下降的原因,但你的代码里有个细节可以调整:metrics参数传入字符串'accuracy'在TensorFlow 2.x中是允许的,但更规范的写法是传入列表['accuracy'],避免潜在的版本兼容问题:
model.compile( optimizer='adam', loss='sparse_categorical_crossentropy', metrics=['accuracy'] # 改为列表形式 )
内容的提问来源于stack exchange,提问作者Jitin
相关产品推荐
相关产品推荐

