Пользовательский Image DataGen для автоэнкодера с шумоподавлением (DAE) в Keras на GPU (исключения)

Вы когда-нибудь создавали собственный ImageDataGenerator для Keras?
Для одного из наших проектов мы уже создали два набора «чистых образов» и несколько зашумленных версий каждого из них как «зашумленные изображения» в двух папках. Я хочу спроектировать и обучить многоуровневый автоэнкодер шумоподавления, чтобы научиться шумоподавлять эти изображения (сканы документов).
Я искал и нашел несколько примеров кода для DAE на MNIST, где они напрямую загружают все изображения в память. Но в моем случае я не могу загрузить все изображения сразу, поэтому я думаю, что мне следует использовать Keras ImageDataGeneratorили что-то вроде того. Я даже нашел примеры AutoEncoder, которые используют ImageDataGenerators для загрузки данных, где они возвращают одно и то же точное изображение как на входе, так и на выходе, и даже добавляют некоторые дополнения как к входным, так и к выходным изображениям в их flow_from_directory() здесь .
Но, как я упоминал ранее, я хочу разработать «Автоэнкодер шумоподавления» и хочу обучить его на «существующем» наборе чистых/зашумленных изображений. Я нашел здесь хорошее описание определения пользовательских генераторов данных в Keras и попытался применить его к моему случаю, но я получаю исключения!

Пожалуйста, найдите мой код:
здесь я создал блокнот Jupyter, опубликованный в Google Colab.и ценю это, если вы, ребята, можете взглянуть на это и дайте мне знать, в чем источник проблемы.

Текущее исключение:

      Epoch 1/5
---------------------------------------------------------------------------
InvalidArgumentError                      Traceback (most recent call last)
h:\Projects\DenoisingAutoencoder\DAE_DataGen.ipynb Cell 7' in <cell line: 2>()
      1 # Train model on dataset
----> 2 model.fit(training_generator,
      3             validation_data=validation_generator,
      4             steps_per_epoch=500, 
      5             epochs=5,
      6             # use_multiprocessing=True,
      7             # workers=6,
      8             # callbacks=[tensorboard_callback]
      9             )

File c:\Users\.conda\envs\me_env_gpu\lib\site-packages\keras\utils\traceback_utils.py:67, in filter_traceback.<locals>.error_handler(*args, **kwargs)
     65 except Exception as e:  # pylint: disable=broad-except
     66   filtered_tb = _process_traceback_frames(e.__traceback__)
---> 67   raise e.with_traceback(filtered_tb) from None
     68 finally:
     69   del filtered_tb

File c:\Users\.conda\envs\me_env_gpu\lib\site-packages\tensorflow\python\eager\execute.py:54, in quick_execute(op_name, num_outputs, inputs, attrs, ctx, name)
     52 try:
     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:

InvalidArgumentError: Graph execution error:

Detected at node 'model_1/conv2d_transpose_2/conv2d_transpose' defined at (most recent call last):
    File "c:\Users\.conda\envs\me_env_gpu\lib\runpy.py", line 196, in _run_module_as_main
      return _run_code(code, main_globals, None,
    File "c:\Users\.conda\envs\me_env_gpu\lib\runpy.py", line 86, in _run_code
      exec(code, run_globals)
    File "c:\Users\.conda\envs\me_env_gpu\lib\site-packages\ipykernel_launcher.py", line 17, in <module>
      app.launch_new_instance()
    File "c:\Users\.conda\envs\me_env_gpu\lib\site-packages\traitlets\config\application.py", line 965, in launch_instance
      app.start()
    File "c:\Users\.conda\envs\me_env_gpu\lib\site-packages\ipykernel\kernelapp.py", line 712, in start
      self.io_loop.start()
    File "c:\Users\.conda\envs\me_env_gpu\lib\site-packages\tornado\platform\asyncio.py", line 199, in start
      self.asyncio_loop.run_forever()
    File "c:\Users\.conda\envs\me_env_gpu\lib\asyncio\base_events.py", line 600, in run_forever
      self._run_once()
    File "c:\Users\.conda\envs\me_env_gpu\lib\asyncio\base_events.py", line 1896, in _run_once
      handle._run()
    File "c:\Users\.conda\envs\me_env_gpu\lib\asyncio\events.py", line 80, in _run
      self._context.run(self._callback, *self._args)
    File "c:\Users\.conda\envs\me_env_gpu\lib\site-packages\ipykernel\kernelbase.py", line 504, in dispatch_queue
      await self.process_one()
    File "c:\Users\.conda\envs\me_env_gpu\lib\site-packages\ipykernel\kernelbase.py", line 493, in process_one
      await dispatch(*args)
    File "c:\Users\.conda\envs\me_env_gpu\lib\site-packages\ipykernel\kernelbase.py", line 400, in dispatch_shell
      await result
    File "c:\Users\.conda\envs\me_env_gpu\lib\site-packages\ipykernel\kernelbase.py", line 724, in execute_request
      reply_content = await reply_content
    File "c:\Users\.conda\envs\me_env_gpu\lib\site-packages\ipykernel\ipkernel.py", line 383, in do_execute
      res = shell.run_cell(
    File "c:\Users\.conda\envs\me_env_gpu\lib\site-packages\ipykernel\zmqshell.py", line 528, in run_cell
      return super().run_cell(*args, **kwargs)
    File "c:\Users\.conda\envs\me_env_gpu\lib\site-packages\IPython\core\interactiveshell.py", line 2880, in run_cell
      result = self._run_cell(
    File "c:\Users\.conda\envs\me_env_gpu\lib\site-packages\IPython\core\interactiveshell.py", line 2935, in _run_cell
      return runner(coro)
    File "c:\Users\.conda\envs\me_env_gpu\lib\site-packages\IPython\core\async_helpers.py", line 129, in _pseudo_sync_runner
      coro.send(None)
    File "c:\Users\.conda\envs\me_env_gpu\lib\site-packages\IPython\core\interactiveshell.py", line 3134, in run_cell_async
      has_raised = await self.run_ast_nodes(code_ast.body, cell_name,
    File "c:\Users\.conda\envs\me_env_gpu\lib\site-packages\IPython\core\interactiveshell.py", line 3337, in run_ast_nodes
      if await self.run_code(code, result, async_=asy):
    File "c:\Users\.conda\envs\me_env_gpu\lib\site-packages\IPython\core\interactiveshell.py", line 3397, in run_code
      exec(code_obj, self.user_global_ns, self.user_ns)
    File "C:\Users\AppData\Local\Temp\ipykernel_40284\3459445018.py", line 2, in <cell line: 2>
      model.fit(training_generator,
    File "c:\Users\.conda\envs\me_env_gpu\lib\site-packages\keras\utils\traceback_utils.py", line 64, in error_handler
      return fn(*args, **kwargs)
    File "c:\Users\.conda\envs\me_env_gpu\lib\site-packages\keras\engine\training.py", line 1384, in fit
      tmp_logs = self.train_function(iterator)
    File "c:\Users\.conda\envs\me_env_gpu\lib\site-packages\keras\engine\training.py", line 1021, in train_function
      return step_function(self, iterator)
    File "c:\Users\.conda\envs\me_env_gpu\lib\site-packages\keras\engine\training.py", line 1010, in step_function
      outputs = model.distribute_strategy.run(run_step, args=(data,))
    File "c:\Users\.conda\envs\me_env_gpu\lib\site-packages\keras\engine\training.py", line 1000, in run_step
      outputs = model.train_step(data)
    File "c:\Users\.conda\envs\me_env_gpu\lib\site-packages\keras\engine\training.py", line 859, in train_step
      y_pred = self(x, training=True)
    File "c:\Users\.conda\envs\me_env_gpu\lib\site-packages\keras\utils\traceback_utils.py", line 64, in error_handler
      return fn(*args, **kwargs)
    File "c:\Users\.conda\envs\me_env_gpu\lib\site-packages\keras\engine\base_layer.py", line 1096, in __call__
      outputs = call_fn(inputs, *args, **kwargs)
    File "c:\Users\.conda\envs\me_env_gpu\lib\site-packages\keras\utils\traceback_utils.py", line 92, in error_handler
      return fn(*args, **kwargs)
    File "c:\Users\.conda\envs\me_env_gpu\lib\site-packages\keras\engine\functional.py", line 451, in call
      return self._run_internal_graph(
    File "c:\Users\.conda\envs\me_env_gpu\lib\site-packages\keras\engine\functional.py", line 589, in _run_internal_graph
      outputs = node.layer(*args, **kwargs)
    File "c:\Users\.conda\envs\me_env_gpu\lib\site-packages\keras\utils\traceback_utils.py", line 64, in error_handler
      return fn(*args, **kwargs)
    File "c:\Users\.conda\envs\me_env_gpu\lib\site-packages\keras\engine\base_layer.py", line 1096, in __call__
      outputs = call_fn(inputs, *args, **kwargs)
    File "c:\Users\.conda\envs\me_env_gpu\lib\site-packages\keras\utils\traceback_utils.py", line 92, in error_handler
      return fn(*args, **kwargs)
    File "c:\Users\.conda\envs\me_env_gpu\lib\site-packages\keras\layers\convolutional.py", line 1336, in call
      outputs = backend.conv2d_transpose(
    File "c:\Users\.conda\envs\me_env_gpu\lib\site-packages\keras\backend.py", line 5720, in conv2d_transpose
      x = tf.compat.v1.nn.conv2d_transpose(x, kernel, output_shape, strides,
Node: 'model_1/conv2d_transpose_2/conv2d_transpose'
Conv2DSlowBackpropInput: Size of out_backprop doesn't match computed: actual = 98, computed = 293 spatial_dim: 2 input: 586 filter: 3 output: 98 stride: 2 dilation: 1
     [[{{node model_1/conv2d_transpose_2/conv2d_transpose}}]] [Op:__inference_train_function_1189]

1 ответ

Я только что проверил ваш код в Google Colab и вижу неплохие комментарии. Вероятно, вам нужно перезапустить сервер, чтобы все заработало. Я пока не являюсь экспертом в DataImageGenerator от Keras, но первое, что приходит мне в голову, это заменить вашу DAE на обычную сеть прямого распространения!

Другие вопросы по тегам