[Error]ValueError: too many values to unpack (expected 2)

ValueError: too many values to unpack (expected 2)

起因

最近在做一门专业课的作业,关于交通灯图像分类,我选择了把数据集按(9:1)分为了(训练集:验证集),并生成了标签,标签格式路径 label,在每次训练完一个epoch后进行验证集的验证,输出准确率

def test():
    print('begin test')
    model.eval()
    total_correct = 0
    val_iter = iter(val_dataloader)
    max_iter = len(val_dataloader)
    for iteration in range(max_iter):
        try:
            images, labels = next(val_iter)
            #print('images, labels')
        except:
            continue

        if torch.cuda.is_available():
            images, labels = images.cuda(), labels.cuda()
            out = model(images)
            prediction = torch.max(out, 1)[1]
            correct = (prediction == labels).sum()
            total_correct += correct
            #print(type(correct), type(total_correct))
            print('Iteration: {}/{}'.format(iteration, max_iter), 'ACC: %.3f' %(correct.float()/batch_size))
    print('All ACC: %.3f'%(total_correct.float()/(len(val_dataloader)* batch_size)))

发现训练时print('All ACC: %.3f'%(total_correct.float()/(len(val_dataloader)* batch_size)))输出会报错
是一个关于数据格式的错误,AttributeError: 'int' object has no attribute 'float'

经过

经过查找错误,最终将错误定位在images, labels = next(val_iter)这行语句,因为在这里异常处理机制try的内容没有执行,直接执行了continue,导致total_correct恒为0
把异常处理机制删去,执行images, labels = next(val_iter)便出现了如下错误:

ValueError: too many values to unpack (expected 2)

可迭代的对象(可以用for循环的对象)Iterable 一类:list,tuple,dict,set,str;
二类:generator(都是Iterator对象),包含生成器和带yield的generatoe function。
我们可以通过iter()函数获取这些可迭代对象的迭代器。然后我们可以对获取到的迭代器不断使⽤next()函数来获取下⼀条数据。iter()函数实际上就是调⽤了可迭代对象的 __iter__ ⽅法。

如:

val_iter = iter(val_dataloader)
images, labels = next(val_iter)

结果

images, labels = next(val_iter)中发生了ValueError: too many values to unpack (expected 2)
是因为我的标签信息路径中存在空格,导致读取信息时出错
把文件夹名称的空格删去,重新生成标签信息就可以训练啦

评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

努力学习DePeng

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值