pytorch训练时报传入的数据为元组(tuple)类型,无法to.device

pytorch训练时报传入的数据为元组类型,无法to.device,以及报ValueError: too many values to unpack (expected 2)–这个就是得看dataset。
首先,可以先debug一下,查看导入的数据和标签是什么类型,然后再查看它的大小,是不是与你网络所匹配,如果是输入维度不匹配,可以在制作dataset时添加或者减小维度。

        Seis = Seis.permute(0, 1, 2)  #4个输入排好序
        Seis = Seis.unsqueeze(dim=0)  #压缩维度,去掉第一个

其次,检查dataset(调用Dataset类并实例化,且作为输入网络的数据)所传入的第一个元素,也就是我的Seis,是什么类型,且shape为多大,同理可知Vmodel(标签),如果大小和类型不是输入网络所要求的,可能它会是DataFrame=4000这种,那么肯定会保错,因为网络需要的只能是tensor。

解决方法:那么就要再对dataset进行拆分,然后重新构建Seis和Vmodel。下面我把新的数据存在了Seis_all和Vmodel_all中(它们存储了整个dataset的数据,查看shape会发现第一个为data_size,那么就正确了),之后就是将新的数据传入网络就可以了。

    # 读取样本数据及标签
    Seis_all=[]
    Vmodel_all=[]
    for j in range(len(dataset)):

        Seis=dataset[j][0]
        Seis = Seis.numpy()  # 再把tensor转为numpy
        Seis_all.append(Seis)

        Vmodel = dataset[j][1]
        Vmodel = Vmodel.numpy()
        Vmodel_all.append(Vmodel)
    Seis_all = torch.tensor(np.array(Seis_all), dtype=torch.float32)
    Vmodel_all = torch.tensor(np.array(Vmodel_all), dtype=torch.float32)
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值