2016-05-31 12 views
3

При использовании Tensorflow я пытаюсь возобновить обучение CIFAR10 с помощью контрольного файла. Обращаясь к некоторым другим статьям, я попытался tf.train.Saver() восстановить без успеха. Может ли кто-то проливать свет на то, как действовать?Тензорный поток cifar10 возобновить тренировку из файла контрольной точки

Фрагмент кода из Tensorflow CIFAR10

def train(): 
    # methods to build graph from the cifar10_train.py 
    global_step = tf.Variable(0, trainable=False) 
    images, labels = cifar10.distorted_inputs() 
    logits = cifar10.inference(images) 
    loss = cifar10.loss(logits, labels) 
    train_op = cifar10.train(loss, global_step) 
    saver = tf.train.Saver(tf.all_variables()) 
    summary_op = tf.merge_all_summaries() 

    init = tf.initialize_all_variables() 
    sess = tf.Session(config=tf.ConfigProto(log_device_placement=FLAGS.log_device_placement)) 
    sess.run(init) 


    print("FLAGS.checkpoint_dir is %s" % FLAGS.checkpoint_dir) 

    if FLAGS.checkpoint_dir is None: 
    # Start the queue runners. 
    tf.train.start_queue_runners(sess=sess) 
    summary_writer = tf.train.SummaryWriter(FLAGS.train_dir, sess.graph) 
    else: 
    # restoring from the checkpoint file 
    ckpt = tf.train.get_checkpoint_state(FLAGS.checkpoint_dir) 
    tf.train.Saver().restore(sess, ckpt.model_checkpoint_path) 

    # cur_step prints out well with the checkpointed variable value 
    cur_step = sess.run(global_step); 
    print("current step is %s" % cur_step) 

    for step in xrange(cur_step, FLAGS.max_steps): 
    start_time = time.time() 
    # **It stucks at this call ** 
    _, loss_value = sess.run([train_op, loss]) 
    # below same as original 

ответ

2

Проблема, кажется, что эта линия:

tf.train.start_queue_runners(sess=sess) 

... только выполняется, если FLAGS.checkpoint_dir is None. Вам все равно нужно запустить бегунов очереди, если вы будете восстанавливаться с контрольной точки.

Обратите внимание, что я рекомендую вам начать очереди бегунов после создавая tf.train.Saver (из-за гонки в выпущенной версии кода), так что лучше структура будет:

if FLAGS.checkpoint_dir is not None: 
    # restoring from the checkpoint file 
    ckpt = tf.train.get_checkpoint_state(FLAGS.checkpoint_dir) 
    tf.train.Saver().restore(sess, ckpt.model_checkpoint_path) 

# Start the queue runners. 
tf.train.start_queue_runners(sess=sess) 

# ... 

for step in xrange(cur_step, FLAGS.max_steps): 
    start_time = time.time() 
    _, loss_value = sess.run([train_op, loss]) 
    # ... 
+0

благодарственное вы за ответ! Он решил проблему. Я думал, что queue_runner отвечает за создание входного изображения (путем искажения), и это не является необходимым шагом при восстановлении из файла контрольной точки. – emerson