使用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)))

發現圖像集位深度沒問題

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