Как решить _pickle.UnpicklingError

Я пытался загрузить и запустить код 2s-AGCN по этой ссылке GitHub : я успешно сгенерировал данные. Но при попытке обучить модель, запустив main.py, я столкнулся с этой ошибкой:

      
[ Mon Feb 20 21:32:20 2023 ] Training epoch: 1
  0%|          | 0/588 [00:22<?, ?it/s]
Traceback (most recent call last):

  File "C:\Users\PC\anaconda3\envs\gcn\lib\site-packages\spyder_kernels\py3compat.py", line 356, in compat_exec
    exec(code, globals, locals)

  File "c:\users\pc\projects\2s-agcn\main.py", line 579, in <module>
    processor.start()

  File "c:\users\pc\projects\2s-agcn\main.py", line 520, in start
    self.train(epoch, save_model=save_model)

  File "c:\users\pc\projects\2s-agcn\main.py", line 380, in train
    for batch_idx, (data, label, index) in enumerate(process):

  File "C:\Users\PC\anaconda3\envs\gcn\lib\site-packages\tqdm\std.py", line 1195, in __iter__
    for obj in iterable:

  File "C:\Users\PC\anaconda3\envs\gcn\lib\site-packages\torch\utils\data\dataloader.py", line 435, in __iter__
    return self._get_iterator()

  File "C:\Users\PC\anaconda3\envs\gcn\lib\site-packages\torch\utils\data\dataloader.py", line 381, in _get_iterator
    return _MultiProcessingDataLoaderIter(self)

  File "C:\Users\PC\anaconda3\envs\gcn\lib\site-packages\torch\utils\data\dataloader.py", line 1034, in __init__
    w.start()

  File "C:\Users\PC\anaconda3\envs\gcn\lib\multiprocessing\process.py", line 121, in start
    self._popen = self._Popen(self)

  File "C:\Users\PC\anaconda3\envs\gcn\lib\multiprocessing\context.py", line 224, in _Popen
    return _default_context.get_context().Process._Popen(process_obj)

  File "C:\Users\PC\anaconda3\envs\gcn\lib\multiprocessing\context.py", line 327, in _Popen
    return Popen(process_obj)

  File "C:\Users\PC\anaconda3\envs\gcn\lib\multiprocessing\popen_spawn_win32.py", line 93, in __init__
    reduction.dump(process_obj, to_child)

  File "C:\Users\PC\anaconda3\envs\gcn\lib\multiprocessing\reduction.py", line 60, in dump
    ForkingPickler(file, protocol).dump(obj)

OSError: [Errno 22] Invalid argument


Traceback (most recent call last):
  File "<string>", line 1, in <module>
  File "C:\Users\PC\anaconda3\envs\gcn\lib\multiprocessing\spawn.py", line 116, in spawn_main
    exitcode = _main(fd, parent_sentinel)
  File "C:\Users\PC\anaconda3\envs\gcn\lib\multiprocessing\spawn.py", line 126, in _main
    self = reduction.pickle.load(from_parent)
_pickle.UnpicklingError: pickle data was truncated

Я попытался изменить строку в файле reduce.py

      ForkingPickler(file, protocol).dump(obj) 

к этой строке:

      ForkingPickler(file, protocol).dumps(obj)

Но он показывает ошибку времени выполнения EOF.

ALso, попытался удалить

pin_memory = True num_workers = 4

согласно тексту . Но я не смог найти его в файле dataloader.py.

1 ответ

Даже если вы успешно сгенерировали данные, дважды проверьте, совпадают ли они с фактическим размером.


Более того, вmain.py, вы можете найтиnum_workersпараметр в строке 227 (для поезда) и строке 234 (для теста).

Поскольку у вас возникли проблемы с тренировочными целями, вы можете изменить его с

num_workers=self.arg.num_workerкnum_workers=0

Это может сработать для вас или поиграть с этим параметром в случае, если0значение не работает.

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