引言
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

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





