从检查点

时间:2017-06-01 10:53:43

标签: python tensorflow queue

背景:我正在使用Estimator训练模型。没有多余的细节,我使用队列来读取一系列输入图像,这些图像使用输入函数进行批处理和操作,我称之为#34; read_pics_batch":

with tf.Session() as sess:
   sess.run(tf.global_variables_initializer())
   sess.run(tf.local_variables_initializer())
   coord = tf.train.Coordinator()
   threads = tf.train.start_queue_runners(sess=sess, coord=coord)

   keypoint_regression.fit(
       input_fn = lambda: inp_mod.read_pics_batch(names_train, \
       joint_annopoints_train,num_in_batch,max_num_epochs,'TRAIN'),
       steps= max_steps_per_epoch*max_num_epochs, # max number of steps
       monitors=[logging_hook])

   coord.request_stop()
   coord.join(threads)

输入函数具有以下形式,其中我也将输入文件顺序随机化:

def read_pics_batch(names_list,joint_list,batch_size,max_num_epochs,task):

    names_tensor = tf.convert_to_tensor(names_list, dtype=tf.string)
    joint_total_tensor = tf.convert_to_tensor(joint_list, dtype=tf.int32)

    min_after_dequeue = 100
    capacity = min_after_dequeue + 3 * batch_size

    file_pattern = [("...")]

    examples = graph_io.read_keyed_batch_examples(file_pattern, batch_size, \
        reader = tf.WholeFileReader, randomize_input = True, \
        parse_fn = example_to_standard_pic, \
        num_epochs = max_num_epochs, queue_capacity = capacity)

我的问题如下:

1)有没有办法从检查点恢复队列状态,就像任何其他变量一样?如果" randomize_input"从read_keyed_batch_examples开始将设置为False,而不是每次重新启动training_op时我会一遍又一遍地读取相同的输入文件,这显然不是我想要的。

2)如果randomize_input = True,队列究竟是如何确定要排队的文件的?我看到两种可能的选择,我不确定哪种是正确的:

  • 它选择了一个大小"容量"的短名单。 (来自" file_pattern")定义的所有文件名给出的完整列表,然后随机化此短名单中名称的顺序

  • 首先将完整列表中的名称随机化,然后创建一个大小"容量"的短名单。出于这个

如果第二种情况适用,我不相信我实际上需要恢复队列状态,因为我原则上每次都会读取不同的文件,但如果第一种情况适用,我仍然会阅读相同的几个文件一遍又一遍,只是以不同的顺序。

感谢您的时间!

0 个答案:

没有答案