目录
1内置数据集
1.1paddle.vision视觉库
import paddle
print(paddle.vision.datasets.__all__)
#####
['DatasetFolder', 'ImageFolder', 'MNIST', 'FashionMNIST',
'Flowers', 'Cifar10', 'Cifar100', 'VOC2012']
使用方式(以MNIST为例):
-
mode (str) -
'train'
或'test'
模式,默认为'train'
。加载训练集或测试集 -
download (bool) - 当
data_file
是None
时,该参数决定是否自动下载数据集文件。默认为True
。 -
backend(str,可选)- 指定图像的返回类型:PIL.Image 或 numpy.ndarray。应该是``{'pil','cv2'}`` 之一。如果未设置此选项,将从paddle.vsion.get_image_backend获取,默认为
pil
。 默认值:None。 -
image_path (str) 和label_path (str)指定下载目录
import paddle.vision.datasets as datasets
data = datasets.MNIST(mode='test', download=False, backend='pil')
print('image: ', data[0][0], 'label: ', data[0][1])
#####
image: <PIL.Image.Image image mode=L size=28x28 at 0x7FCB931D0610> label: [7]
1.2paddle.text自然语言库
import paddle
print(paddle.text.__all__)
###
['Conll05st', 'Imdb', 'Imikolov', 'Movielens', 'UCIHousing',
'WMT14', 'WMT16', 'ViterbiDecoder', 'viterbi_decode']
使用方式(以WMT4)为例
-
data_file(str)- 保存数据集压缩文件的路径, 如果参数:attr: download 设置为True,可设置为None。默认为None。
-
mode(str)- 'train', 'test' 或'gen'。默认为'train'。
-
dict_size(int)- 词典大小。默认为-1。
-
download(bool)- 如果:attr: data_file 未设置,是否自动下载数据集。默认为True。
from paddle.text.datasets import WMT14
wmt14 = WMT14(mode='test', dict_size=50)
src_ids, trg_ids, trg_ids_next = wmt14[0]
print(src_ids, trg_ids, trg_ids_next)
######
[ 0 32 2 2 24 38 2 8 2 20 6 2 3 2 1] [0 2 2 2 2 2 2 2] [2 2 2 2 2 2 2 1]
2.自定义数据集
paddle.io.Dataset类
映射式(map-style)数据集需要继承这个基类,映射式数据集为可以通过一个键值索引并获取指定样本的数据集,所有映射式数据集须实现以下方法:
__getitem__
: 根据给定索引获取数据集中指定样本,在 paddle.io.DataLoader
中需要使用此函数通过下标获取样本。
__len__
: 返回数据集样本个数, paddle.io.BatchSampler
中需要样本个数生成下标序列。
from paddle.io import Dataset
import paddle
class MyDataSet(Dataset):
def __init__(self, num_samples):
super(MyDataSet, self).__init__()
self.num_samples = num_samples
def __getitem__(self, index):
data = paddle.uniform(IMAGE_SIZE, dtype='float32')
label = paddle.randint(0, 9, dtype='int64')
return data, label
def __len__(self):
return self.num_samples
3.数据加载器
paddle.io.DataLoader类
DataLoader返回一个迭代器,该迭代器根据 batch_sampler
给定的顺序迭代一次给定的 dataset
DataLoader支持单进程和多进程的数据加载方式,当 num_workers
大于0时,将使用多进程方式异步加载数据。
DataLoader当前支持 map-style
和 iterable-style
的数据集, map-style
的数据集可通过下标索引样本,请参考 paddle.io.Dataset
; iterable-style
数据集只能迭代式地获取样本,类似Python迭代器,请参考 paddle.io.IterableDataset
。
from paddle.io import DataLoader
custom_dataset = MyDataSet(20*64)
dataloder = DataLoader(custom_dataset, batch_size=64, shuffle=True)
for batch_id, data in enumerate(dataloder):
x_data = data[0]
y_data = data[1]
print(x_data.shape)
print(y_data.shape)
break
#####
[64, 28, 28]
[64, 1]