使用tfrecord格式出现的坑outofrange

OutOfRangeError (see above for traceback): RandomShuffleQueue ‘_1_shuffle_batch/random_shuffle_queue’ is closed and has insufficient elements (requested 1, current size 0)
这是我执行tfrecord文件格式出现的错误,而且是代码跑了一半之后,出现的错误。
有可能的解决办法(因为我也是经过不断的尝试):
1、

img = tf.decode_raw(features['img_raw'], tf.float32)

解码数据时一定要与注意数据存储时的类型,必须一致,否则,就会造成解码数据失败,返回空对象,如:存储时使用的是float32数据类型,解码时也必须使用tf.float32

tensorflow.python.framework.errors_impl.OutOfRangeError: RandomShuffleQueue '_2_shuffle_batch/random_shuffle_queue' is closed and has insufficient elements (requested 200, current size 0)

[[Node: shuffle_batch = QueueDequeueManyV2[component_types=[DT_UINT8, DT_FLOAT], timeout_ms=-1, _device="/job:localhost/replica:0/task:0/device:CPU:0"](shuffle_batch/random_shuffle_queue, shuffle_batch/n)]]

我们设定的读取一组大小为200,而当前可用的为0,就是说没有可供读取的对象,其原因就在于以下一句:

img = tf.decode_raw(features[‘img_raw’], tf.uint8)
这一句设定的解码方式与存储时用的tf.float32编码方式不一致,导致解码错误,返回不了我们想要的对象,导致当前可用元素为0。修改为存储是使用的tf.float32后,问题解决,可正常读取存储的数据。

2、
可能是tf.train.shuffle_batch()函数中参数num_threads的原因。于是,我就将这个改成了64,128。线程多了,电脑一下子死机了,中间还不断输出乱码。
3、有的博主说可能是图像集的位深度出现不一致的情况,于是遍历了一遍图像集,并将其转换为24位

import Image
import os
Image_path = "F:/dataset"
s = os.listdir(Image_path)
for i in s:
    document = os.path.join(Image_path, i)
    lena = Image.open(document, 'r')
    lena_RGBA_rgb = lena.convert("RGB")
    lena_RGBA_rgb.save(document)
    print(lena.getpixel((0, 0)))

发现图像集位深度没问题

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章