如何解决模型训练期间的图执行错误?

我从头开始构建了Inception V3模型。当我尝试使用Kaggle上流行的狗和猫数据集训练我的模型时,遇到了图执行错误。原因可能是我的数据集;我猜测有些数据不在RGB范围内,或者可能是其他原因。

数据集

模型编译

model.compile(optimizer=Adam(learning_rate=0.0001),loss = 'categorical_crossentropy', metrics= ['accuracy'])

数据预处理

train_batches = ImageDataGenerator(preprocessing_function=tf.keras.applications.inception_v3.preprocess_input) \    .flow_from_directory(directory=trin_path, target_size=(299,299), classes=['dogs', 'cats'], batch_size=10)valid_batches = ImageDataGenerator(preprocessing_function=tf.keras.applications.inception_v3.preprocess_input) \    .flow_from_directory(directory=valid_path, target_size=(299,299), classes=['dogs', 'cats'], batch_size=10)test_batches = ImageDataGenerator(preprocessing_function=tf.keras.applications.inception_v3.preprocess_input) \     .flow_from_directory(directory=test_path, target_size=(299,299), classes=['dogs', 'cats'], batch_size=10, shuffle=False)

模型拟合

r = model.fit(x=train_batches, validation_data=valid_batches, epochs=5)

错误发生

Epoch 1/5 72/500 [===>..........................] - ETA: 1:14 - loss: 0.6929 - accuracy: 0.6042/usr/local/lib/python3.7/dist-packages/PIL/TiffImagePlugin.py:770: UserWarning: Possibly corrupt EXIF data.  Expecting to read 32 bytes but only got 0. Skipping tag 270  " Skipping tag %s" % (size, len(data), tag)/usr/local/lib/python3.7/dist-packages/PIL/TiffImagePlugin.py:770: UserWarning: Possibly corrupt EXIF data.  Expecting to read 5 bytes but only got 0. Skipping tag 271  " Skipping tag %s" % (size, len(data), tag)/usr/local/lib/python3.7/dist-packages/PIL/TiffImagePlugin.py:770: UserWarning: Possibly corrupt EXIF data.  Expecting to read 8 bytes but only got 0. Skipping tag 272  " Skipping tag %s" % (size, len(data), tag)/usr/local/lib/python3.7/dist-packages/PIL/TiffImagePlugin.py:770: UserWarning: Possibly corrupt EXIF data.  Expecting to read 8 bytes but only got 0. Skipping tag 282  " Skipping tag %s" % (size, len(data), tag)/usr/local/lib/python3.7/dist-packages/PIL/TiffImagePlugin.py:770: UserWarning: Possibly corrupt EXIF data.  Expecting to read 8 bytes but only got 0. Skipping tag 283  " Skipping tag %s" % (size, len(data), tag)/usr/local/lib/python3.7/dist-packages/PIL/TiffImagePlugin.py:770: UserWarning: Possibly corrupt EXIF data.  Expecting to read 20 bytes but only got 0. Skipping tag 306  " Skipping tag %s" % (size, len(data), tag)/usr/local/lib/python3.7/dist-packages/PIL/TiffImagePlugin.py:770: UserWarning: Possibly corrupt EXIF data.  Expecting to read 48 bytes but only got 0. Skipping tag 532  " Skipping tag %s" % (size, len(data), tag)/usr/local/lib/python3.7/dist-packages/PIL/TiffImagePlugin.py:788: UserWarning: Corrupt EXIF data.  Expecting to read 2 bytes but only got 0.   warnings.warn(str(msg))500/500 [==============================] - ETA: 0s - loss: 0.6609 - accuracy: 0.6318---------------------------------------------------------------------------UnknownError                              Traceback (most recent call last)<ipython-input-90-bd0e48768399> in <module>()----> 1 r = model.fit(x=train_batches,validation_data=valid_batches,epochs=5)1 frames/usr/local/lib/python3.7/dist-packages/tensorflow/python/eager/execute.py in quick_execute(op_name, num_outputs, inputs, attrs, ctx, name)     53     ctx.ensure_initialized()     54     tensors = pywrap_tfe.TFE_Py_Execute(ctx._handle, device_name, op_name,---> 55                                         inputs, attrs, num_outputs)     56   except core._NotOkStatusException as e:     57     if name is not None:UnknownError: Graph execution error:2 root error(s) found.  (0) UNKNOWN:  UnidentifiedImageError: cannot identify image file <_io.BytesIO object at 0x7fb8672df290>Traceback (most recent call last):  File "/usr/local/lib/python3.7/dist-packages/tensorflow/python/ops/script_ops.py", line 271, in __call__    ret = func(*args)  File "/usr/local/lib/python3.7/dist-packages/tensorflow/python/autograph/impl/api.py", line 642, in wrapper    return func(*args, **kwargs)  File "/usr/local/lib/python3.7/dist-packages/tensorflow/python/data/ops/dataset_ops.py", line 1004, in generator_py_func    values = next(generator_state.get_iterator(iterator_id))  File "/usr/local/lib/python3.7/dist-packages/keras/engine/data_adapter.py", line 830, in wrapped_generator    for data in generator_fn():  File "/usr/local/lib/python3.7/dist-packages/keras/engine/data_adapter.py", line 956, in generator_fn    yield x[i]  File "/usr/local/lib/python3.7/dist-packages/keras_preprocessing/image/iterator.py", line 65, in __getitem__    return self._get_batches_of_transformed_samples(index_array)  File "/usr/local/lib/python3.7/dist-packages/keras_preprocessing/image/iterator.py", line 230, in _get_batches_of_transformed_samples    interpolation=self.interpolation)  File "/usr/local/lib/python3.7/dist-packages/keras_preprocessing/image/utils.py", line 114, in load_img    img = pil_image.open(io.BytesIO(f.read()))  File "/usr/local/lib/python3.7/dist-packages/PIL/Image.py", line 2896, in open    "cannot identify image file %r" % (filename if filename else fp)PIL.UnidentifiedImageError: cannot identify image file <_io.BytesIO object at 0x7fb8672df290>     [[{{node PyFunc}}]]     [[IteratorGetNext]]  (1) CANCELLED:  Function was cancelled before it was started0 successful operations.0 derived errors ignored. [Op:__inference_test_function_69081]

回答:

一些图像的EXIF数据损坏,因此在训练过程中PIL读取图像失败。

可能的解决方法:

  1. PIL:请先从训练集中删除损坏的图像,例如,PetImages/Cat/666.jpg和PetImages/Dog/11702.jpg。另请参考https://www.kaggle.com/code/sushovansaha9/cat-dog-classification-transferlearning-ipynb

  2. PIL:删除EXIF数据但保留图像。

import piexif  piexif.remove(filename)
  1. tf.io:仅读取图像而不删除任何图像或EXIF数据:
file = tf.io.read_file(filename)image = tf.image.decode_jpeg(file)

Related Posts

Keras Dense层输入未被展平

这是我的测试代码: from keras import…

无法将分类变量输入随机森林

我有10个分类变量和3个数值变量。我在分割后直接将它们…

如何在Keras中对每个输出应用Sigmoid函数?

这是我代码的一部分。 model = Sequenti…

如何选择类概率的最佳阈值?

我的神经网络输出是一个用于多标签分类的预测类概率表: …

在Keras中使用深度学习得到不同的结果

我按照一个教程使用Keras中的深度神经网络进行文本分…

‘MatMul’操作的输入’b’类型为float32,与参数’a’的类型float64不匹配

我写了一个简单的TensorFlow代码,但不断遇到T…

发表回复

您的邮箱地址不会被公开。 必填项已用 * 标注