深度学习数据集定义与加载
深度學習數據集定義與加載
深度學習模型在訓練時需要大量的數據來完成模型調優,這個過程均是數字的計算,無法直接使用原始圖片和文本等來完成計算。因此與需要對原始的各種數據文件進行處理,轉換成深度學習模型可以使用的數據類型。
一、框架自帶數據集
飛槳框架將深度學習任務中常用到的數據集作為領域API開放,對應API所在目錄為paddle.vision.datasets與paddle.text.datasets,可以通過以下代碼飛槳框架中提供了哪些數據集。
import paddle
print(‘視覺相關數據集:’, paddle.vision.datasets.all)
print(‘自然語言相關數據集:’, paddle.text.datasets.all)
視覺相關數據集: [‘DatasetFolder’, ‘ImageFolder’, ‘MNIST’, ‘FashionMNIST’, ‘Flowers’, ‘Cifar10’, ‘Cifar100’, ‘VOC2012’]
自然語言相關數據集: [‘Conll05st’, ‘Imdb’, ‘Imikolov’, ‘Movielens’, ‘UCIHousing’, ‘WMT14’, ‘WMT16’]
警告
除paddle.vision.dataset與paddle.text.dataset外,飛槳框架還內置了另一套數據集,路徑為paddle.dataset.*,但是該數據集的使用方式較老,會在未來的版本廢棄,盡量不要使用該目錄下數據集的API。
這里可以定義手寫數字體的數據集,其它數據集的使用方式也都類似。用mode來標識訓練集與測試集。數據集接口會自動從遠端下載數據集到本機緩存目錄~/.cache/paddle/dataset。
from paddle.vision.transforms import ToTensor
訓練數據集 用ToTensor將數據格式轉為Tensor
train_dataset = paddle.vision.datasets.MNIST(mode=‘train’, transform=ToTensor())
驗證數據集
val_dataset = paddle.vision.datasets.MNIST(mode=‘test’, transform=ToTensor())
二、自定義數據集
在實際的場景中,更多需要使用已有的相關數據來定義數據集。可以使用飛槳提供的paddle.io.Dataset基類,來快速實現自定義數據集。
import paddle
from paddle.io import Dataset
BATCH_SIZE = 64
BATCH_NUM = 20
IMAGE_SIZE = (28, 28)
CLASS_NUM = 10
class MyDataset(Dataset):
“”"
步驟一:繼承paddle.io.Dataset類
“”"
def init(self, num_samples):
“”"
步驟二:實現構造函數,定義數據集大小
“”"
super(MyDataset, self).init()
self.num_samples = num_samples
def __getitem__(self, index):"""步驟三:實現__getitem__方法,定義指定index時如何獲取數據,并返回單條數據(訓練數據,對應的標簽)"""data = paddle.uniform(IMAGE_SIZE, dtype='float32')label = paddle.randint(0, CLASS_NUM-1, dtype='int64')return data, labeldef __len__(self):"""步驟四:實現__len__方法,返回數據集總數目"""return self.num_samples
測試定義的數據集
custom_dataset = MyDataset(BATCH_SIZE * BATCH_NUM)
print(’=custom dataset=’)
for data, label in custom_dataset:
print(data.shape, label.shape)
break
=custom dataset=
[28, 28] [1]
通過以上的方式,就可以根據實際場景,構造自己的數據集。
三、數據加載
飛槳推薦使用paddle.io.DataLoader完成數據的加載。簡單的示例如下:
train_loader = paddle.io.DataLoader(custom_dataset, batch_size=BATCH_SIZE, shuffle=True)
如果要加載內置數據集,將 custom_dataset 換為 train_dataset 即可
for batch_id, data in enumerate(train_loader()):
x_data = data[0]
y_data = data[1]
print(x_data.shape)
print(y_data.shape)
break
[64, 28, 28]
[64, 1]
通過上述的方法,就定義了一個數據迭代器train_loader, 用于加載訓練數據。通過batch_size=64設置了數據集的批大小為64,通過shuffle=True,在取數據前會打亂數據。此外,還可以通過設置num_workers來開啟多進程數據加載,提升加載速度。
注解
DataLoader 默認用異步加載數據的方式來讀取數據,一方面可以提升數據加載的速度,另一方面也會占據更少的內存。如果需要同時加載全部數據到內存中,設置use_buffer_reader=False。
總結
以上是生活随笔為你收集整理的深度学习数据集定义与加载的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: Paddle广播 (broadcasti
- 下一篇: 深度学习数据预处理