Как решить _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
значение не работает.