出现报错
buzhihuoyefeng opened this issue · 5 comments
buzhihuoyefeng commented
1-2图片建模的执行到features,labels = next(iter(dl_train))时报错_pickle.PicklingError: Can't pickle <function at 0x000002735CA54F28>: attribute lookup on main failed。是windows平台的问题吗
lyhue1991 commented
建议使用git clone下载书中源码和对应./data/中的数据集呢。可能是使用压缩包方式下载数据集造成的。
Schrodingeer commented
我用了git clone下载之后还是出现了这个问题,应该怎么解决呢
chaoshengt commented
同样的问题
bigbigbirdman commented
这个问题好像是因为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)
在我的环境下是解决了这个问题,但是其中原因就不清楚了
ywang802 commented
我用的是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出了问题。