2017-10-17 75 views
1

我想用TF-Slim的回归问题使用DensNet。我的数据包含60000个jpeg图像,每个图像有37个浮动标签。我将我的数据分成了一个火车集(60%),一个验证集(20%)和一个测试集(20%)的三个不同的tfrecords文件。如何定期评估TF-Slim中模型的性能?

我需要在训练循环中评估验证集并制作一个如image的图。 在TF-Slim文档中,他们只是分别解释训练循环和评估循环。训练结束后,我可以评估验证或测试集。正如我所说,我需要在训练过程中进行评估。

我试着用slim.evaluation.evaluation_loop函数代替slim.evaluation.evaluate_once。但它没有帮助。

slim.evaluation.evaluation_loop(
    master=FLAGS.master, 
    checkpoint_dir=checkpoint_path, 
    logdir=FLAGS.eval_dir, 
    num_evals=num_batches, 
    eval_op=list(names_to_updates.values()) + print_ops, 
    variables_to_restore=variables_to_restore, 
    summary_op = tf.summary.merge(summary_ops), 
    eval_interval_secs = eval_interval_secs) 

我也尝试评估.evaluate_repeatedly以及。

from tensorflow.contrib.training.python.training import evaluation 

evaluation.evaluate_repeatedly(
    master=FLAGS.master, 
    checkpoint_dir=checkpoint_path, 
    eval_ops=list(names_to_updates.values()) + print_ops, 
    eval_interval_secs = eval_interval_secs) 

在这两种功能,他们只是阅读checkpoint_dir最新可用的检查点,显然等待下一个,生成新的关卡然而,当他们根本不执行。

我在CPU上使用Python 2.7.13和Tensorflow 1.3.0。

任何帮助将不胜感激。

回答

0

使用evaluate_once在使用sleep的bash脚本中工作得很好。看来,Tensorboard能够绘制从给定的eval_dir多单次运行...

所以我使用类似:

#!/bin/bash 
set -e 

# Paths to model and evaluation results 
TRAIN_DIR=~/pDL/tensorflow/model/mobilenet_v1_1_224_rp-v1/run0004 
TEST_DIR=${TRAIN_DIR}/eval 

# Where the dataset is saved to. 
DATASET_DIR=/mnt/data/tensorflow/data 

# Run evaluation (using slim.evaluation.evaluate_once) 
CONTINUE=1 

while [ "$CONTINUE" -ne 0 ] 
do 

python eval_image_classifier.py \ 
    --checkpoint_path=${TRAIN_DIR} \ 
    --eval_dir=${TEST_DIR} \ 
    --dataset_name=master_db \ 
    --preprocessing_name=preprocess224 \ 
    --dataset_split_name=valid \ 
    --dataset_dir=${DATASET_DIR} \ 
    --model_name=mobilenet_v1 \ 
    --patch_size=64 

echo "sleeping for next run" 
sleep 600 
done 
0

这似乎是正确的解决这里设置checkpoint_path的问题: https://github.com/tensorflow/tensorflow/issues/13769

答案是由Ellie68设置的:

if tf.gfile.IsDirectory(FLAGS.checkpoint_path): 
    if tf.train.latest_checkpoint(FLAGS.checkpoint_path): 
     checkpoint_path = tf.train.latest_checkpoint(FLAGS.checkpoint_path) 
    else: 
     checkpoint_path = FLAGS.checkpoint_path 
+0

谢谢。它运作良好。 – Hosein