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如下圖
使用的notepad++的插件 HEX-editor打開如下
結尾:
上圖是正常的圖片。
不正常的圖片就不是這種情況。但是這種圖片不影響正常的打開,可能會影響訓練。
jpg的這個問題可以見這裏就是下面的這個參考鏈接
參考:https://blog.csdn.net/u011681952/article/details/82254756#comments