我的案例类似于this question。
在训练深度学习模型和阅读循环内的图像时面对它。
scipy.misc.imread(rawImagePath).astype(numpy.float32)
上面的代码在绝大多数情况下完美运行,但有时我会收到错误:
batch 90, loading batch data...
x path: /path_to_dataset/train/9.png
2017-10-31 20:23:34.531221: W tensorflow/core/kernels/queue_base.cc:294] _0_input_producer: Skipping cancelled enqueue attempt with queue not closed
Traceback (most recent call last):
File "train.py", line 452, in <module>
batch_X = load_data(batch_X_paths)
File "/path_to_my_script/utilities.py", line 85, in load_data
x = misc.imread(batch_X_paths[i]).astype(np.float32)
TypeError: float() argument must be a string or a number
区别在于:我有一组固定的文件,我不会在目录中写新文件。
我做了一点研究,发现错误不是来自
numpy.astype()
但来自
PIL.Image.open()
scipy.misc 使用 PIL 。
此外,我设法在 Jupyter Notebook 中重现了这个错误。我在里面用 reading / astype 代码做了一个循环。几秒钟后(我的测试.png大小约为10MB)我中断了单元的执行,瞧!
error reproduced in Jupyter Notebook
在 scipy.misc 内部,有一个代码如下:
def imread(name, flatten=False, mode=None):
im = Image.open(name)
return fromimage(im, flatten=flatten, mode=mode)
图片 这是 PIL 对象。并且 Image.open() 在中断单元格时为我们提供了0维列表。
我已经尝试了Evert的建议并使用 尝试/除 进行了循环,但有时甚至在5次尝试后仍然失败。
此外,我尝试了 OpenCV imread() 方法,而不是 scipy.misc ,有时它也会失败。错误文字:
libpng error: incorrect data check
所以......我的想法用完了。