运行范例代码时遇到报错python3 PicklingError: Can’t pickle <function at…> attribute lookup on __main
查了一些博客,大概意思是在Unix/Linux下,测试程序可以正常运行,但如果实在Windows下,将会报错。
源代码如下:
# Construct datasets.
# The argument "loader" tells how torchvision reads the data.
train_set = DatasetFolder("food-11/training/labeled", loader=lambda x: Image.open(x), extensions="jpg", transform=train_tfm)
valid_set = DatasetFolder("food-11/validation", loader=lambda x: Image.open(x), extensions="jpg", transform=test_tfm)
unlabeled_set = DatasetFolder("food-11/training/unlabeled", loader=lambda x: Image.open(x), extensions="jpg", transform=train_tfm)
test_set = DatasetFolder("food-11/testing", loader=lambda x: Image.open(x), extensions="jpg", transform=test_tfm)
对代码稍作修改,重新定义一下lambda实现的功能,修改后的代码如下:
#lambda
def re_lambda(x):
return Image.open(x)
# Construct datasets.
# The argument "loader" tells how torchvision reads the data.
train_set = DatasetFolder("food-11/training/labeled", loader=re_lambda, extensions="jpg", transform=train_tfm)
valid_set = DatasetFolder("food-11/validation", loader=re_lambda, extensions="jpg", transform=test_tfm)
unlabeled_set = DatasetFolder("food-11/training/unlabeled", loader=re_lambda, extensions="jpg", transform=train_tfm)
test_set = DatasetFolder("food-11/testing", loader=re_lambda, extensions="jpg", transform=test_tfm)
具体原因不太清楚,至此只是解决了这个问题。