Tensorflow tf.keras.Model训练精度在训练期间运行Model.evaluate()后跳跃

Tensorflow tf.keras.Model训练精度在训练期间运行Model.evaluate()后跳跃,tensorflow,keras,tf.keras,Tensorflow,Keras,Tf.keras,我正在使用Model.fit()训练TensorFlow Keras模型。我还在使用TensorFlow的on\u train\u batch\u end()语法,在每批之后使用回调来记录我的培训准确性度量。此外,我正在使用另一个回调函数,每1000批运行一次Model.evaluate(),以计算验证集的准确性,并更新Model.fit()期间在回调函数中传递的日志 查看记录的指标与批次号之间的对比显示出非常复杂的结果。运行Model.evaluate()后,训练精度会经历一次显著的“震荡”,

我正在使用
Model.fit()
训练TensorFlow Keras
模型。我还在使用TensorFlow的
on\u train\u batch\u end()
语法,在每批之后使用回调来记录我的培训准确性度量。此外,我正在使用另一个回调函数,每1000批运行一次
Model.evaluate()
,以计算验证集的准确性,并更新
Model.fit()期间在回调函数中传递的
日志

查看记录的指标与批次号之间的对比显示出非常复杂的结果。运行
Model.evaluate()
后,训练精度会经历一次显著的“震荡”,最初会触发记录的训练精度的快速提高,随后会触发训练精度的显著下降,随后恢复速度会变慢(见附图)

我的猜测是,这与调用的
reset\u metrics()
有关,它循环并调用每个度量的方法。我无法确定
reset\u states()
在做什么,以及这是否与我观察到的行为有关。它似乎与
分类准确性的父类相关。我还没有在TensorFlow文档中找到任何有用的东西

Model.fit()
期间显示的度量值是否实际上是某种形式的移动平均值,而不是批处理度量值?在这种情况下,
reset_states()
方法将重置移动平均线,可能产生震荡行为

对TensorFlow的内部工作有更好理解的人能帮上忙吗


您是否已经检查了您的中间评估是否会导致损失或梯度的不希望的累积,然后(可能)在评估后的第一次权重更新期间应用这些损失或梯度?谢谢@DanielB。我当然担心调用
Model.evaluate()
会对我的验证数据进行静默训练。这是我的另一个假设。然而,如果是真的,我希望验证集的精确度比我观察到的要高。另外,
Model.evaluate()
应该将网络置于“测试模式”,我希望这意味着不会计算梯度。欢迎你的想法。