我成功地使用
然而,这两个程序都被移动到了
我在
当然,这会降低训练速度,几乎没有任何进展。当我使用
那么,正确的启动
train.py
和eval.py
训练了一个自定义示例的目标检测模型。在并行运行两个程序的同时,我能够在训练期间通过tensorboard可视化训练和评估指标。然而,这两个程序都被移动到了
legacy
文件夹中,现在使用model_main.py
运行训练和评估是首选方法(仅需执行单个进程)。但是当我使用以下pipeline.config
启动model_main.py
时:train_config {
batch_size: 1
num_steps: 40000
...
}
eval_config {
# entire evaluation set
num_examples: 821
# for continuous evaluation
max_evals: 0
...
}
我在
model_main.py
输出中启用了INFO日志,发现训练和评估是顺序执行的(之前是两个进程同时进行),每个训练步骤完成后都会进行完整的评估。INFO:tensorflow:Saving 'checkpoint_path' summary for global step 35932: ...
INFO:tensorflow:Saving checkpoints for 35933 into ...
INFO:tensorflow:Calling model_fn.
...
INFO:tensorflow:Done calling model_fn.
INFO:tensorflow:Starting evaluation at 2018-08-30-10:06:47
...
INFO:tensorflow:Restoring parameters from .../model.ckpt-35933
INFO:tensorflow:Running local_init_op.
INFO:tensorflow:Done running local_init_op.
INFO:tensorflow:Evaluation [82/821]
...
INFO:tensorflow:Evaluation [738/821]
INFO:tensorflow:Evaluation [820/821]
INFO:tensorflow:Evaluation [821/821]
...
INFO:tensorflow:Finished evaluation at 2018-08-30-10:29:35
INFO:tensorflow:Saving dict for global step 35933: ...
INFO:tensorflow:Saving 'checkpoint_path' summary for global step 35933: .../model.ckpt-35933
INFO:tensorflow:Saving checkpoints for 35934 into .../model.ckpt.
INFO:tensorflow:Calling model_fn.
...
INFO:tensorflow:Done calling model_fn.
INFO:tensorflow:Starting evaluation at 2018-08-30-10:29:56
...
INFO:tensorflow:Restoring parameters from .../model.ckpt-35934
当然,这会降低训练速度,几乎没有任何进展。当我使用
model_main
命令行参数--num_eval_steps
将评估步骤减少到1
时,训练速度与以前一样快(使用train.py
和eval.py
),但是评估指标变得无用(例如:DetectionBoxes_Precision/mAP...
变成固定值,如1
,0
或甚至-1
)。在我看来,它似乎仅针对同一张图片不断计算这些值。那么,正确的启动
model_main.py
方式是什么,使其能够合理快速地进行并行计算整个评估集的评估指标呢?
model_main.py
而不是如何修改它,但显然这并不清楚。实际上,我找到了一种不同的方法,通过更改RunConfig
的save_checkpoints_steps
和save_checkpoints_secs
来修改源代码。它会传递给model_lib
的create_estimator_and_inputs
来创建Estimator
。从我的角度来看,优点在于我可以控制评估间隔的训练步数,而不是时间。 - Volker Stampa