2021李宏毅HW3关于Windows系统下运行pickle不能序列化问题

运行范例代码时遇到报错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)

具体原因不太清楚,至此只是解决了这个问题。

评论 6
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值