2

我正在尝试使用DensNet解决 TF-Slim 的回归问题。我的数据包含 60000 张 jpeg 图像,每个图像有 37 个浮动标签。我将数据分成三个不同的 tfrecords 文件,分别是训练集 (60%)、验证集 (20%) 和测试集 (20%)。

我需要在训练循环期间评估验证集并制作一个类似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 )

我也尝试了evaluation.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。

任何帮助将不胜感激。

4

2 回答 2

1

使用 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
于 2017-10-20T07:08:58.370 回答
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
于 2017-11-01T06:09:43.650 回答