lyhue1991/eat_pytorch_in_20_days

出现报错

buzhihuoyefeng opened this issue · 5 comments

1-2图片建模的执行到features,labels = next(iter(dl_train))时报错_pickle.PicklingError: Can't pickle <function at 0x000002735CA54F28>: attribute lookup on main failed。是windows平台的问题吗

建议使用git clone下载书中源码和对应./data/中的数据集呢。可能是使用压缩包方式下载数据集造成的。

我用了git clone下载之后还是出现了这个问题,应该怎么解决呢

同样的问题

这个问题好像是因为windows下pickle模块不能序列化lambda造成的,但是我也是道听途说的....,我的解决办法是

ds_train = datasets.ImageFolder("./data/cifar2/train/",
            transform = transform_train,target_transform= lambda t:torch.tensor([t]).float())
ds_valid = datasets.ImageFolder("./data/cifar2/test/",
            transform = transform_valid,target_transform= lambda t:torch.tensor([t]).float())

这两句中的lambda函数换掉,自己定义一个target_transform函数,如

def target_trans(target):
    return torch.tensor([target]).float()

然后把原来代码改为

ds_train = datasets.ImageFolder("./data/cifar2/train/", transform=transform_train, target_transform=target_trans)
ds_valid = datasets.ImageFolder("./data/cifar2/test/", transform=transform_valid, target_transform=target_trans)

在我的环境下是解决了这个问题,但是其中原因就不清楚了

我用的是Mac,这一行也报错。

解决办法是把num_worker的值改为0。

dl_train = DataLoader(ds_train,batch_size = 50,shuffle = True,
	num_workers=0)
dl_valid = DataLoader(ds_valid,batch_size = 50,shuffle = True,
	num_workers=0)

应该是multiprocessing出了问题。