现在我使用tensorflow编写程序来验证模型。我使用FIFOQueue对输入数据进行排队。例如,我有50,000张图像,一次排列100张图像。除最后一次迭代外,该程序运行良好。在最后一次迭代中,它显示错误 “E tensorflow / core / client / tensor_c_api.cc:485] FIFOQueue'_0_path_queue'已关闭且元素不足(请求1,当前大小为0) [[Node:path_queue_Dequeue = QueueDequeue_class = [“loc:@path_queue”],component_types = [DT_INT32,DT_BOOL,DT_STRING],timeout_ms = -1,_device =“/ job:localhost / replica:0 / task:0 / cpu: 0 “]]”
我认为这是因为它试图将50,001~50,100图像排入队列但却无法实现。但是,我不需要将这些图像排入队列,也不会使用它们。如何避免此错误?
另一个问题是,如果我想使用dequeue_many(100),则图像总数不能被100整除,比如说45678.在这种情况下,tensorflow会抛出错误。我该如何解决这个问题?
感谢。
答案 0 :(得分:2)
尝试使用dequeue_up_to
代替dequeue_many
:
https://www.tensorflow.org/versions/r0.10/api_docs/python/io_ops.html
希望有所帮助!
答案 1 :(得分:1)
你可以捕捉到特定的错误,一旦所有的例子都用完了就会优雅地结束训练:
try:
while True:
# Run training Ops here...
except tf.errors.OutOfRangeError:
print('Done training -- epoch limit reached')
答案 2 :(得分:1)
我已经多次遇到此问题,根据我的经验,这通常是由于找不到输入文件而引起的。我的输入是一个目录中的png列表,我正在使用它来获取输入图像。
input = tensorflow.train.string_input_producer(tensorflow.train.match_filenames_once("/input/*.png"))
以某种方式无法正确获取文件。将其更改为
filename_im = tensorflow.train.string_input_producer(glob.glob('/input/*.png'))
解决了问题
答案 3 :(得分:0)
我认为这只是队列为空的警告,但不会导致错误。我看到类似的警告但我的程序没有破坏。你的吗?请参阅this thread。