发布时间:2024-07-12 13:01
对于二维表格,我们要进行预测,首先就是数据预处理,如何把处理好的数据变换成 Pytorch 所使用的数据集是首要步骤。
torch.utils.data包括了Dataset和DataLoader两个类。torch.utils.data.**Dataset是一个抽象类,不能够直接调用。如果你想自定义数据集的话,就需要继承该类,并实现__len__和__getitem__方法。**前者提供数据的大小,后者通过给定索引获取数据与标签。因为__getitem__一次只能获取一个数据而我们采用的是MiniBatch的方式训练的,所以需要我们通过torch.utils.data.DataLoader来定义一个新的迭代器,实现batch读取。
首先自定义的数据集要继承 torch.utils.data 类,重写两个方法:
# 自定义数据集
import torch
from torch.utils.data import Dataset, DataLoader
class ExampleDataset(Dataset):
def __init__(self, path):
# 一个由二维向量组成的数据集
df = pd.read_csv(path)
self.data = torch.tensor(df.iloc[:, 1: -1].to_numpy())
self.label = torch.tensor(df.iloc[:, -1].to_numpy(dtype=np.float32))
def __getitem__(self,index):
return self.data[index], self.label[index]
def __len__(self):
return len(self.data)
pass
类中传入一个路径,该路径是自己的 二维表格:
data = ExampleDataset(r\'data\\distance.csv\')
print(len(data))
print(data[0])
使用 torch.utils.data.DataLoader 定义新的迭代器,进而实现遍历读取:
注意:batch_size 设置为2,则每次迭代输出 2 条样本数据。
example_loader = DataLoader(
dataset=data,
batch_size=2, # 批次大小
shuffle = False, # False : 数据不被随机打乱
num_workers = 0, # 数据载入器使用的进程数目,默认为0
drop_last=True # 是否要把最后的批次丢弃
)
print(example_loader)
输出:
<torch.utils.data.dataloader.DataLoader object at 0x0000021AB6162370>
迭代读取:
for i,(X, y) in enumerate(example_loader):
print(\"i:\",i)
Data, Label = X, y
print(\"data:\",Data)
print(\"Label:\",Label)
break
输出:
i: 0
data: tensor([[1016.9312, 4782.8571, 4552.9630, 6298.9947, 50.0000, 50.0000,
88.0000],
[1338.4247, 4920.1370, 4109.1781, 5943.5616, 50.0000, 100.0000,
88.0000]], dtype=torch.float64)
Label: tensor([1., 1.])
参考文章:
Datasets & DataLoaders — PyTorch Tutorials 1.11.0+cu102 文档
参考博客
用 Python 画一张北京实时疫情地图:从爬虫到绘图到自动上传服务器
数据平台调度升级改造 | 从Azkaban 平滑过度到 Apache DolphinScheduler 的操作实践
Pandas向本地Excel已存在的工作表追加写入DataFrame
SpringBoot+SpringCloud+rabbitmq+redis(秒杀)
python图形界面化编程GUI(一)窗口管理和常用的组件(Label、Button、Entry)
网络协议之:Domain name service DNS详解
python使用pip成功导入库后还是报错的解决方法(针对vscode)
《MATLAB 神经网络43个案例分析》:第3章 遗传算法优化BP神经网络——非线性函数拟合