当我使用TensorFlow Object Detection API训练SSD对象检测模型20K步时,我发现训练时间有所不同:
在开始的10分钟内训练很快,大约执行了500步(即0.83步/秒)。然后,它变慢了大约40至50分钟的时间来执行单个训练步骤,在评估数据集上评估模型并将检查点保存在磁盘上。因此,我在几个步骤后中断了培训,然后继续进行培训。
每次,它在开始的10分钟内训练很快,然后迅速减慢,如图所示。
该模型的训练由TensorFlow's Estimator API tf.estimator.train_and_evaluate()
实施
谁能解释它的工作原理?估算者如何控制训练和评估期?我不想对模型的每一步都进行评估!
最佳答案
如果查看EvalSpec和TrainSpec,则有一个参数油门_秒,它负责确定何时调用评估。请参考this heated discussion,其中包含有关Estimator方法的许多详细信息!控制此将是控制火车和评估周期的选择。同样,总的来说,train_and_evaluate将通过构建训练和评估操作的图表来工作。训练图仅创建一次,但是每次需要评估时都会重新创建评估图。这意味着它将加载在训练期间创建的检查点,这可能是花费这么长时间的原因之一!也许在该讨论中提到的InMemoryEvaluationHook可以帮助您,因为它不会在每次调用评估时重新加载检查点。
关于python - tf.estimator.train_and_evaluate`函数控制训练和评估时间的机制是什么?,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/54086614/