在深度学习中,无论是做哪项任务,图像、文本或是声音,都涉及到数据的处理,
而数据通常包含在数据集中
paddle当中有两个重要的类是和数据集相关的:
Dataset和DataLoader
【Dataset】
它位于paddle.io.Dataset,用于定义数据集
这里只介绍它的__getitem__和__len__两个方法
1. __getitem__
__getitem__用于实现索引操作,它定义了通过索引访问数据集中的样本的行为。
当我们使用索引操作符 [] 时,实际上是调用了 __getitem__ 函数
__getitem__ 函数接收一个索引作为参数,并返回对应索引位置的数据样本
2. __len__
__len__ 函数用于返回数据集中样本的数量。它定义了获取数据集长度的行为
下面的代码使用Dataset定义了一个基础的数据集:
import paddle
class MyDataset(paddle.io.Dataset):
def __init__(self, data, labels):
self.data = data
self.labels = labels
def __getitem__(self, index):
data = self.data[index]
label = self.labels[index]
return data, label
def __len__(self):
return len(self.data)
data=[2,8,1,3,9,4]
labels=[0,1,0,0,1,0]
mydata=MyDataset(data,labels)
for i in range(len(mydata)):
print(mydata[i])
在这里,我们构建了一个小型数据集:它的数据部分为列表data,标签部分为列表labels,各有6个元素
我们创建了MyDataset类(继承自paddle.io.Dataset),并用它创建了一个mydata实例(传入了数据集data,labels)
最后我们使用一个for循环打印了数据集的每个元素
len()函数和[]都能正常工作
【DataLoader】
它被定义在paddle.io.DataLoader,负责在模型训练过程中高效地加载和批处理数据
DataLoader的一个重要作用是可以批量的从数据集中取出数据,方便程序进行并行计算,这极大了提高了深度学习程序的运行效率
import paddle
class MyDataset(paddle.io.Dataset):
def __init__(self, data, labels):
self.data = data
self.labels = labels
def __getitem__(self, index):
data = self.data[index]
label = self.labels[index]
return data, label
def __len__(self):
return len(self.data)
data=[2,8,1,3,9,4]
labels=[0,1,0,0,1,0]
mydata=MyDataset(data,labels)
dataloader = paddle.io.DataLoader(mydata, batch_size=2, shuffle=True)
for batch in dataloader:
print(batch)
可以看到,因为设置batchsize=2,每次会取出2组数据
而shuffle=True使得数据的顺序被打乱了
这里显示我们的数据类型是Tensor,这正是我们后面要常用的类型,我们可以称之为张量或者向量,详情我们将在后面的课程介绍
原创声明:本文系作者授权腾讯云开发者社区发表,未经许可,不得转载。
如有侵权,请联系 cloudcommunity@tencent.com 删除。
原创声明:本文系作者授权腾讯云开发者社区发表,未经许可,不得转载。
如有侵权,请联系 cloudcommunity@tencent.com 删除。