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

使用Keras和TensorFlow进行航空影像分类:保存模型预测结果随机问题咨询

解决Keras/TensorFlow保存模型后预测结果随机性问题

我太懂这种糟心的感觉了——花了好大力气训练好的航空影像分类模型,存成h5格式后用来预测新区域,结果每次跑出来的预测结果都不一样,完全没个准数。结合你用256×256切片、Sequential模型加ImageDataGenerator的场景,我整理了几个最可能的诱因和对应的解决办法:

  • 全局随机种子没固定
    TensorFlow和Keras里从权重初始化、数据增强到Dropout层的操作,很多都依赖随机数生成。如果没在代码最开头就把所有相关的随机种子固定死,每次运行程序时这些随机操作的输出都会变,直接导致预测结果波动。你可以在代码开头加上这段:

    import numpy as np
    import tensorflow as tf
    import random
    
    # 固定numpy的随机种子
    np.random.seed(42)
    # 固定Python原生随机模块的种子
    random.seed(42)
    # 固定TensorFlow的全局随机种子
    tf.random.set_seed(42)
    # 要是用的是TensorFlow 2.0以下的版本,还得加这句:
    # tf.set_random_seed(42)
    
  • 预测时还在做数据增强
    你训练时用ImageDataGenerator加了各种数据增强(比如随机翻转、缩放、旋转)来提升模型泛化能力,但如果预测阶段的生成器还保留这些随机增强操作,那每次输入模型的测试切片都会被随机修改,结果当然不一样!预测时一定要把生成器改成只做归一化,关掉所有随机增强:

    # 预测用的生成器,只保留归一化,去掉所有随机增强
    test_datagen = ImageDataGenerator(rescale=1./255)
    
  • Dropout/BatchNorm层没切换到推理模式
    要是你的模型里有Dropout或者BatchNormalization层,训练和推理阶段的行为是不一样的——训练时Dropout会随机丢弃神经元,BatchNorm会用当前批次的均值方差;但推理时需要固定这些参数。虽然Keras的predict方法默认会自动切换模式,但有时候加载模型后如果有自定义操作,可能会出问题。保险起见,加载模型后可以手动设置:

    model = tf.keras.models.load_model('your_trained_model.h5')
    model.trainable = False  # 强制模型进入推理模式
    # 旧版Keras可以用这句:tf.keras.backend.set_learning_phase(0)
    
  • 模型保存/加载的兼容性问题
    h5格式虽然方便,但如果训练和预测环境的TensorFlow/Keras版本不一致,可能会导致模型权重或结构加载异常,间接引发预测结果不稳定。建议你检查两边的环境版本是否一致,或者改用TensorFlow官方推荐的SavedModel格式保存(稳定性更强):

    # 保存为SavedModel格式
    model.save('your_saved_model_dir')
    # 加载模型
    model = tf.keras.models.load_model('your_saved_model_dir')
    
  • 测试数据加载时开启了打乱
    如果你用flow_from_directory加载测试数据时设置了shuffle=True,那每次加载的样本顺序都会变。虽然单个样本的预测结果应该一致,但如果后续有批量统计或者可视化操作,看起来就像是结果“随机”了。预测时一定要把shuffle设为False:

    test_generator = test_datagen.flow_from_directory(
        'your_test_data_path',
        target_size=(256, 256),
        batch_size=32,
        shuffle=False  # 固定样本顺序,确保每次输入一致
    )
    

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.26 09:29:48