在win系统下复现SPSR代码出现这种错误,查询资料发现是windows系统的问题。
因为windows操作系统的原因,在Windows中,多进程multiprocessing使用的是序列化pickle来在多进程之间转移数据,而socket对象是不能被序列化的,但是在linux操作系统上却没问题,因为在linux上多进程multiprocessing使用的是fork,所以在windows上可以改用多线程。因为网络通信属于io密集型的操作,对cpu计算要求不高,不用多进程,用多线程就行。
令num_workers=0,记得无论是参数设置还是数据集读取处理的代码,都要重新设置。
loader = torch.utils.data.DataLoader(dataset=dataset,
batch_size=self.batch,
shuffle=self.shuf,
num_workers=0,
drop_last=True)
parser.add_argument('--num_workers', type=int, default=0)