2017-10-17 74 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