tensorflow计算时间每20k步递增一次

tensorflow计算时间每20k步递增一次,tensorflow,tensorboard,Tensorflow,Tensorboard,我注意到在训练中,tensorflow的速度越来越慢。我在训练过程中绘制了每个样本的计算时间,我观察到在最初的80k大致不变后,它会不断增加;更重要的是,它似乎遵循一种模式,即计算时间每20k步增加一次,并在其间保持不变 经过400k步后,每个样本的计算时间从1.46毫秒增加到25.11毫秒,x17的增加显然是不受欢迎的 当我停止训练并从上次保存的模型恢复时,每个样本的计算时间会下降到~1.46毫秒,因此这不是来自模型 是否有人遇到过同样的问题,原因是什么?(我的下一步将在不保存摘要的情况下运

我注意到在训练中,tensorflow的速度越来越慢。我在训练过程中绘制了每个样本的计算时间,我观察到在最初的80k大致不变后,它会不断增加;更重要的是,它似乎遵循一种模式,即计算时间每20k步增加一次,并在其间保持不变

经过400k步后,每个样本的计算时间从1.46毫秒增加到25.11毫秒,x17的增加显然是不受欢迎的

当我停止训练并从上次保存的模型恢复时,每个样本的计算时间会下降到~1.46毫秒,因此这不是来自模型

是否有人遇到过同样的问题,原因是什么?(我的下一步将在不保存摘要的情况下运行,以尝试在此级别定位问题)

更新:当摘要关闭时,计算时间保持不变

Update:在训练循环之前调用和
tf.get\u default\u graph().finalize()
时,不会引发摘要错误

更新和部分答案

计算时间的膨胀似乎是由于在评估我的摘要时使用了值为
tf.RunOptions.FULL\u trace
trace\u level

替换

run_options = tf.RunOptions(trace_level=tf.RunOptions.FULL_TRACE)
smry = sess.run(smry_op, feed_dict=feed_dict, options=run_options)


解决这个问题。当然,问题仍然是为什么完整跟踪会产生如此大的开销,因此我保留这个问题。

如果你缩小这个范围,请更新。也许你每20.000步保存一次模型权重,每次都有内存泄漏?我确实保存模型,但每1000步一次。你能分享你训练循环的代码吗?因为禁用摘要似乎可以解决问题,所以当启用摘要时,您的训练循环中可能有什么东西正在向图形中添加节点。测试这一点的一种方法是在训练循环之前添加
tf.get\u default\u graph().finalize()
,并查看引发第一个异常的位置。为了获得稳定的性能,最佳实践是在开始训练循环之前构建整个图,而不是在循环体的图中添加任何节点。我很难共享代码。但是,
finalize()
在培训期间不会产生任何错误。(我相应地更新了我的问题)。
smry = sess.run(smry_op, feed_dict=feed_dict)