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

tf.keras.backend.set_learning_phase作用及对EfficientNet检测效果的影响

tf.keras.backend.set_learning_phase()作用及效果差异解答

函数的实际作用

tf.keras.backend.set_learning_phase()是Keras框架中用来全局切换模型运行模式的接口,传入的布尔参数直接决定模型运行在训练态还是推理态:

  • 传入True时,模型处于训练模式,所有训练阶段专属的逻辑都会生效:
    • Dropout、DropConnect等正则化层会随机屏蔽部分神经元输出,降低过拟合风险
    • BatchNormalization层会使用当前输入批次的均值、方差做归一化计算,同时同步更新全局滑动平均的统计值
  • 传入False时,模型处于推理模式,所有训练专属逻辑会被关闭:
    • Dropout类正则化层不会屏蔽任何神经元,全量权重参与计算
    • BatchNormalization层直接使用训练阶段累计得到的全局滑动平均均值、方差做归一化,不会更新任何统计值

检测效果差异的原因

EfficientNet网络结构中大量使用了BatchNormalization层,部分版本也集成了Dropout正则化策略,你加载的是已经训练完成的模型检查点,本身要执行的是预测推理任务:

  1. 当你设置set_learning_phase(True)时,模型强制运行在训练态:一方面BatchNormalization不用训练好的全局统计值,反而用当前少量预测图片的局部批次统计值做归一化,直接导致提取的特征分布和训练时的分布严重偏移;另一方面Dropout随机失活神经元也会导致特征提取不完整,最终输出的检测框置信度普遍偏低、准确率差,才会出现大量目标漏检的情况。
  2. 当你设置set_learning_phase(False)时,模型运行在正确的推理态,所有层都调用训练完成的固定参数计算,输出的检测结果和置信度都符合训练阶段的预期,自然召回率和得分都正常。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.10.04 17:48:01