TensorFlow錯誤Out of range: FIFOQueue '_3_batch_1/fifo_queue' is closed and has insufficient elements

Tensorlow訓練模型時出錯

錯誤如下

(0) Out of range: FIFOQueue '_3_batch_1/fifo_queue' is closed and has insufficient elements (requested 64, current size 21)
     [[node batch_1 (defined at /guest/Documents/ShoePrintAnalyze01/utils.py:146) ]]
     [[batch_1/_2587]]
  (1) Out of range: FIFOQueue '_3_batch_1/fifo_queue' is closed and has insufficient elements (requested 64, current size 21)
     [[node batch_1 (defined at /guest/Documents/ShoePrintAnalyze01/utils.py:146) ]]

經過百度谷歌都沒有找到很好的辦法,查找到的方法大多是如下:

在初始化變量的時候執行下面兩句代碼

sess.run(tf.global_variables_initializer())
sess.run(tf.local_variables_initializer())

可是在我這裏並沒有什麼用。

解決辦法

經過查看console輸出發現了下面的這個提示,這個提示主要是圖片有問題,一般情況,輸出這個提示程序會直接停止掉

Premature end of JPEG file

可以在獲取batch的時候可以像下面這樣寫,主要是try_recover_truncated=True這裏,

# shuffle=shuffle 打亂數據讓每一次訓練的數據順序都不一樣
input_queue = tf.train.slice_input_producer([image, label], 
                                            num_epochs=epoch_num,
                                            shuffle=shuffle)  

label = input_queue[1]
image_contents = tf.read_file(input_queue[0])
image = tf.image.decode_jpeg(image_contents, channels=3, try_recover_truncated=True)

tf.image.decode_jpeg這個函數里加上try_recover_truncated=True,還是會有 Premature end of JPEG file 這個提示輸出,但是不會程序不會停止了,也不會報 Out of range: FIFOQueue '_3_batch_1/fifo_queue' is closed and has insufficient elements (requested 64, current size 21) 這個錯誤了。

原因

最後見檢查圖片發現是圖片有問題,jpg格式的圖片在在下載的過程中可以存在干擾或者什麼導致 jpg格式的圖片出現錯誤,雖然不影響打開圖片,但是對訓練是有影響的

jpg圖片格式

用十六進制打開jpg的圖片我們可以看到開始的兩位是 ff d8 結尾的兩位是 ff d9如下圖

圖1

使用的notepad++的插件 HEX-editor打開如下

結尾:

上圖是正常的圖片。

不正常的圖片就不是這種情況。但是這種圖片不影響正常的打開,可能會影響訓練。

jpg的這個問題可以見這裏就是下面的這個參考鏈接

參考:https://blog.csdn.net/u011681952/article/details/82254756#comments

 

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