背景:我正在使用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")定义的所有文件名给出的完整列表,然后随机化此短名单中名称的顺序
首先将完整列表中的名称随机化,然后创建一个大小"容量"的短名单。出于这个
如果第二种情况适用,我不相信我实际上需要恢复队列状态,因为我原则上每次都会读取不同的文件,但如果第一种情况适用,我仍然会阅读相同的几个文件一遍又一遍,只是以不同的顺序。
感谢您的时间!