Google Colab Keras не читает загруженный измененный utils.py файл для отладки UnidentifiedImageError

#python #tensorflow #keras #python-imaging-library #google-colaboratory

#python #тензорный поток #keras #python-imaging-library #google-colaboratory

Вопрос:

Мой первый пост SO, поэтому, пожалуйста, будьте любезны 😉

Я пытаюсь отладить ошибку в Google Colab, возникшую при обучении модели классификации изображений Tensorflow Keras на больших обучающих наборах данных (5 папок с 5000 изображениями в папке), поэтому я не могу найти изображения вручную (хотя я уже удалил все изображения без ext или с неподдерживаемыми ext).

Я предполагаю, что один или некоторые файлы изображений повреждены и хотят найти, какие из них вызывают подобные ошибки: UnidentifiedImageError: cannot identify image file <_io.BytesIO object at 0x7f66303c9888>.

Я добавил строки в утилиты.py чтобы напечатать путь к файлу вместо приведенного выше бита BytesIO, используя советы отсюда, загрузил файл в Colab и скопировал его в библиотеку Colab Keras в начале моего кода, используя команды ниже, и все равно получаю тот же результат. Есть ли какой-нибудь трюк для изменения предварительно загруженных библиотек Colab, которые мне не хватает? Любые другие идеи о том, как я могу узнать, какие файлы выдают UnidentifiedImageError?

!rm "/usr/local/lib/python3.6/dist-packages/keras_preprocessing/image/utils.py"
!mv "/content/utils.py" "/usr/local/lib/python3.6/dist-packages/keras_preprocessing/image/utils.py"

Полная трассировка стека, которая привела меня к изменению utils.py файл (я также пытался изменить Image.py и ему не повезло):

 Training attempt number: 016, for 5 epochs
Epoch 1/5
  9/141 [>.............................] - ETA: 1:11:07 - loss: 124759892186628096.0000 - accuracy: 0.2361
---------------------------------------------------------------------------
UnknownError                              Traceback (most recent call last)
<ipython-input-9-8dc7f89bc1ac> in <module>()
     28     callbacks=[ckpt_callback],
     29     validation_data=test_generator,
---> 30     validation_steps=test_steps).history
     31 
     32 # Save trained model

8 frames
/usr/local/lib/python3.6/dist-packages/tensorflow/python/eager/execute.py in quick_execute(op_name, num_outputs, inputs, attrs, ctx, name)
     58     ctx.ensure_initialized()
     59     tensors = pywrap_tfe.TFE_Py_Execute(ctx._handle, device_name, op_name,
---> 60                                         inputs, attrs, num_outputs)
     61   except core._NotOkStatusException as e:
     62     if name is not None:

UnknownError: 2 root error(s) found.
  (0) Unknown:  UnidentifiedImageError: cannot identify image file <_io.BytesIO object at 0x7f80d4153410>
Traceback (most recent call last):

  File "/usr/local/lib/python3.6/dist-packages/tensorflow/python/ops/script_ops.py", line 244, in __call__
    ret = func(*args)

  File "/usr/local/lib/python3.6/dist-packages/tensorflow/python/autograph/impl/api.py", line 302, in wrapper
    return func(*args, **kwargs)

  File "/usr/local/lib/python3.6/dist-packages/tensorflow/python/data/ops/dataset_ops.py", line 827, in generator_py_func
    values = next(generator_state.get_iterator(iterator_id))

  File "/usr/local/lib/python3.6/dist-packages/tensorflow/python/keras/engine/data_adapter.py", line 814, in wrapped_generator
    for data in generator_fn():

  File "/usr/local/lib/python3.6/dist-packages/tensorflow/python/keras/engine/data_adapter.py", line 940, in generator_fn
    yield x[i]

  File "/usr/local/lib/python3.6/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.6/dist-packages/keras_preprocessing/image/iterator.py", line 230, in _get_batches_of_transformed_samples
    interpolation=self.interpolation)

  File "/usr/local/lib/python3.6/dist-packages/keras_preprocessing/image/utils.py", line 114, in load_img
    fp.write(f_data)

  File "/usr/local/lib/python3.6/dist-packages/PIL/Image.py", line 2862, in open
    "cannot identify image file %r" % (filename if filename else fp)

PIL.UnidentifiedImageError: cannot identify image file <_io.BytesIO object at 0x7f80d4153410>


     [[{{node PyFunc}}]]
     [[IteratorGetNext]]
     [[categorical_crossentropy/softmax_cross_entropy_with_logits/Shape_2/_12]]
  (1) Unknown:  UnidentifiedImageError: cannot identify image file <_io.BytesIO object at 0x7f80d4153410>
Traceback (most recent call last):

  File "/usr/local/lib/python3.6/dist-packages/tensorflow/python/ops/script_ops.py", line 244, in __call__
    ret = func(*args)

  File "/usr/local/lib/python3.6/dist-packages/tensorflow/python/autograph/impl/api.py", line 302, in wrapper
    return func(*args, **kwargs)

  File "/usr/local/lib/python3.6/dist-packages/tensorflow/python/data/ops/dataset_ops.py", line 827, in generator_py_func
    values = next(generator_state.get_iterator(iterator_id))

  File "/usr/local/lib/python3.6/dist-packages/tensorflow/python/keras/engine/data_adapter.py", line 814, in wrapped_generator
    for data in generator_fn():

  File "/usr/local/lib/python3.6/dist-packages/tensorflow/python/keras/engine/data_adapter.py", line 940, in generator_fn
    yield x[i]

  File "/usr/local/lib/python3.6/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.6/dist-packages/keras_preprocessing/image/iterator.py", line 230, in _get_batches_of_transformed_samples
    interpolation=self.interpolation)

  File "/usr/local/lib/python3.6/dist-packages/keras_preprocessing/image/utils.py", line 114, in load_img
    fp.write(f_data)

  File "/usr/local/lib/python3.6/dist-packages/PIL/Image.py", line 2862, in open
    "cannot identify image file %r" % (filename if filename else fp)

PIL.UnidentifiedImageError: cannot identify image file <_io.BytesIO object at 0x7f80d4153410>


     [[{{node PyFunc}}]]
     [[IteratorGetNext]]
0 successful operations.
0 derived errors ignored. [Op:__inference_train_function_1999]

Function call stack:
train_function -> train_function
  

Комментарии:

1. Похоже, вы пытаетесь передать буфер в памяти, то есть BytesIO объект, функции, которая ожидает просто путь к некоторому файлу (вероятно, в виде строки). Но это может быть просто вводящее в заблуждение сообщение…

2. Что может вызвать это? Я знаю, что этот код работает, когда все изображения «нормальные», поскольку я использовал его для многих других проектов на сегодняшний день, где каждый раз все библиотеки одинаковы, и единственными изменениями являются параметры набора данных и обучения.