Pytorch中DataLoader输出类型问题--“ RuntimeError: Input type (double) and bias type (float) should be the“

文章讨论了在Pytorch中使用DataLoader时遇到的精度问题,即DataLoader将np.array转换为Tensor时保持了原有的数据精度,导致与神经网络默认的float32精度不兼容。解决方案包括在Dataset中手动转换精度或在DataLoader读取batch时进行转换。

引言

Pytorch中DataLoader输出精度问题–“ RuntimeError: Input type (double) and bias type (float) should be the same"和“RuntimeError: expected scalar type Double but found Float”来源很简单,在使用DataLoader进行数据集读取后,得到的Batch数据通过神经网络报错RuntimeError: expected scalar type Double but found Float,经查看是因为Pytorch中神经网络的参数默认精度是torch.float32,而送入的测试数据精度是torch.float64导致报错。但实际上笔者并没有显式对输入数据的精度进行调整,只是在Dataset构造时从本地读取了文件,再以此构建了DataLoader类,因此进行了一番排错。经实验发现,这算是Pytoch DataLoader的考虑不周。

代码环境复现

 首先我们本地存特征和标签:

from torch import nn
import numpy as np
from torch.utils.data import DataLoader,Dataset

X=np.random.rand(10,3,8,8)
import os
os.makedirs('./test')
np.save(X,'./test/feature.npy')
y=np.random.randint(2,size=(8,))
np.save('./test/label.npy',y)

然后构建相应的DataLoader:

class CustomData(Dataset):
    def 
评论 1
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
红包 添加红包
表情包 插入表情
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值