【发布时间】:2018-07-07 19:01:11
【问题描述】:
我正在使用相对较新的 tf.slim 数据集,DatasetDataProvider 模式。以下代码显示了关键片段:
with tf.Graph().as_default():
# get the dataset split
dataset = util.get_split(train_or_eval,
args.tfrecord_folder,
0,
args.eval_set_size,
crop_size,
file_pattern=file_pattern)
features, labels = util.load_batch(dataset,
batch_size=args.eval_batch_size,
num_readers=10,
num_epochs=1,
is_training=True)
with tf.Session() as sess:
sess.run(tf.global_variables_initializer())
sess.run(tf.local_variables_initializer())
# start the queue runner
with slim.queues.QueueRunners(sess):
...run some ops...
下面是 load_batch 的定义:
def load_batch(dataset, batch_size=64, is_training=False,
num_epochs=None, common_queue_capacity=256,
common_queue_min=32, num_readers=None):
shuffle = True
# create the data provider
data_provider = slim.dataset_data_provider.DatasetDataProvider(
dataset,
num_readers=num_readers,
shuffle=shuffle,
num_epochs=num_epochs,
common_queue_capacity=
common_queue_capacity,
common_queue_min= common_queue_min,
seed=5)
# get the tensors from the data provider
images, labels = data_provider.get(['image_raw','label'])
# batch up some training data
images, labels = tf.train.batch([image_raw, label],
batch_size=batch_size,
num_threads=5,
allow_smaller_final_batch=True,
capacity=2 * batch_size)
return images, labels
这在 num_epochs=None 时工作正常(根据源中的 cmets 意味着可以无限次读取 tfrecords 文件),但在 num_epochs=1 时失败。这是错误消息:
Out of range: FIFOQueue '_9_batch/fifo_queue' is closed and has insufficient elements (requested 32, current size 0)
显然,我需要能够在不重复示例的情况下运行 eval 步骤,以获得良好的准确性和混淆矩阵数。任何想法将不胜感激......
根据 cmets 中的请求,我正在添加堆栈跟踪。我在 Google Cloud ML 中运行这项工作,因此以这种方式显示它最容易。日志有一系列成对的消息如下:
超出范围:FIFOQueue '_6_batch/fifo_queue' 已关闭并且有 元素不足(请求 32,当前大小 0)[[节点:batch = QueueDequeueUpToV2[component_types=[DT_UINT8, DT_INT64, DT_STRING, DT_STRING],timeout_ms=-1, _device="/job:localhost/replica:0/task:0/cpu:0"](batch/fifo_queue, batch/n)]]
[[节点:批次= QueueDequeueUpToV2[component_types=[DT_UINT8, DT_INT64, DT_STRING, DT_STRING],timeout_ms=-1, _device="/job:localhost/replica:0/task:0/cpu:0"](batch/fifo_queue, batch/n)]]
最终堆栈跟踪是
"副本主控 0 以非零状态 1 退出。终止 原因:Error.Traceback(最近一次调用最后一次):[...] 文件 “/root/.local/lib/python2.7/site-packages/trainer/task.py”,第 509 行, 在 main() 文件“/root/.local/lib/python2.7/site-packages/trainer/task.py”,第 505 行, 主要是 run() 文件“/root/.local/lib/python2.7/site-packages/trainer/task.py”,第 113 行, 运行中 run_eval(args) 文件“/root/.local/lib/python2.7/site-packages/trainer/task.py”,第 285 行, 在 run_eval is_training=True) 文件“/root/.local/lib/python2.7/site-packages/trainer/util.py”,第 210 行, 在 load_batch 容量=3 * batch_size)文件“/usr/local/lib/python2.7/dist-packages/tensorflow/python/training/input.py”, 第 872 行,批量 名称=名称)文件“/usr/local/lib/python2.7/dist-packages/tensorflow/python/training/input.py”, 第 665 行,在 _batch 中 dequeued = queue.dequeue_up_to(batch_size, name=name) 文件 "/usr/local/lib/python2.7/dist-packages/tensorflow/python/ops/data_flow_ops.py", 第 499 行,在 dequeue_up_to 中 self._queue_ref, n=n, component_types=self._dtypes, name=name) 文件 "/usr/local/lib/python2.7/dist-packages/tensorflow/python/ops/gen_data_flow_ops.py", 第 1402 行,在 _queue_dequeue_up_to_v2 timeout_ms=timeout_ms, name=name) 文件 "/usr/local/lib/python2.7/dist-packages/tensorflow/python/framework/op_def_library.py", 第 763 行,在 apply_op 中 op_def=op_def) 文件 "/usr/local/lib/python2.7/dist-packages/tensorflow/python/framework/ops.py", 第 2327 行,在 create_op 中 original_op=self._default_original_op, op_def=op_def) 文件 "/usr/local/lib/python2.7/dist-packages/tensorflow/python/framework/ops.py", 第 1226 行,在 init 中 self._traceback = _extract_stack()
OutOfRangeError(参见上面的回溯):FIFOQueue '_6_batch/fifo_queue' 已关闭且元素不足 (请求 32,当前大小 0)[[节点:批处理 = QueueDequeueUpToV2[component_types=[DT_UINT8, DT_INT64, DT_STRING, DT_STRING],timeout_ms=-1, _device="/job:localhost/replica:0/task:0/cpu:0"](batch/fifo_queue, batch/n)]] 要了解有关您的工作退出原因的更多信息,请查看日志: https://console.cloud.google.com/logs/viewer?...
【问题讨论】:
-
你能发布完整的堆栈跟踪吗?
-
我在上面添加了完整的堆栈跟踪。感谢您的任何想法...
标签: tensorflow