运行RCAN项目代码遇坑总结

一.【Pytorch1.1】ImportError: cannot import name ‘_update_worker_pids’ from ‘torch._C’
遇到这个问题首先将自己的pytorch版本改为1.1版本,然后改如下代码:
1.

from torch._C import _set_worker_signal_handlers, _update_worker_pids, \
    _remove_worker_pids, _error_if_any_worker_fails
from torch.utils.data.dataloader import DataLoader
from torch.utils.data.dataloader import _DataLoaderIter
from torch.utils.data.dataloader import ManagerWatchdog
from torch.utils.data.dataloader import _pin_memory_loop
from torch.utils.data.dataloader import MP_STATUS_CHECK_INTERVAL
 
from torch.utils.data.dataloader import ExceptionWrapper
from torch.utils.data.dataloader import _use_shared_memory
from torch.utils.data.dataloader import numpy_type_map
from torch.utils.data.dataloader import default_collate
from torch.utils.data.dataloader import pin_memory_batch
from torch.utils.data.dataloader import _SIGCHLD_handler_set
from torch.utils.data.dataloader import _set_SIGCHLD_handler

改为:

from torch._C import _set_worker_signal_handlers
from torch.utils.data import _utils
from torch.utils.data.dataloader import DataLoader
from torch.utils.data.dataloader import _DataLoaderIter
 
_use_shared_memory = False
except Exception:
    data_queue.put((idx, ExceptionWrapper(sys.exc_info())))

改为:

except Exception:
   data_queue.put((idx, _utils.ExceptionWrapper(sys.exc_info())))

首先将:

self.worker_result_queue = multiprocessing.SimpleQueue()

改为:

self.worker_result_queue = multiprocessing.Queue()

再将:

self.worker_manager_thread = threading.Thread(
    target=_pin_memory_loop,
    args=(self.worker_result_queue, self.data_queue, self.done_event, self.pin_memory,
          maybe_device_id))
self.worker_manager_thread.daemon = True
self.worker_manager_thread.start()

改为:

self.pin_memory_thread = threading.Thread(
    target=_pin_memory_loop,
    args=(self.worker_result_queue, self.data_queue, maybe_device_id, self.done_event))
self.pin_memory_thread.daemon = True
self.pin_memory_thread.start()

最后将:

target=_pin_memory_loop,

改为:

 target=_utils.pin_memory._pin_memory_loop,
_update_worker_pids(id(self), tuple(w.pid for w in self.workers))
_set_SIGCHLD_handler()

改为:

_utils.signal_handling._set_worker_pids(id(self), tuple(w.pid for w in self.workers))
_utils.signal_handling._set_SIGCHLD_handler()
collate_fn=default_collate

改为:

collate_fn=_utils.collate.default_collate

二.如果又出现:

ValueError: x and y must have same first dimension, but have shapes (59,) and (58,)

则将:

将trainer.py中所有的:
self.scheduler.get_last_epoch() + 1

改为:

self.scheduler.get_last_epoch()
  • 6
    点赞
  • 19
    收藏
    觉得还不错? 一键收藏
  • 4
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 4
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值