日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 人文社科 > 生活经验 >内容正文

生活经验

深度学习数据集定义与加载

發(fā)布時間:2023/11/28 生活经验 36 豆豆
生活随笔 收集整理的這篇文章主要介紹了 深度学习数据集定义与加载 小編覺得挺不錯的,現(xiàn)在分享給大家,幫大家做個參考.

深度學習數(shù)據(jù)集定義與加載
深度學習模型在訓練時需要大量的數(shù)據(jù)來完成模型調(diào)優(yōu),這個過程均是數(shù)字的計算,無法直接使用原始圖片和文本等來完成計算。因此與需要對原始的各種數(shù)據(jù)文件進行處理,轉(zhuǎn)換成深度學習模型可以使用的數(shù)據(jù)類型。
一、框架自帶數(shù)據(jù)集
飛槳框架將深度學習任務(wù)中常用到的數(shù)據(jù)集作為領(lǐng)域API開放,對應(yīng)API所在目錄為paddle.vision.datasets與paddle.text.datasets,可以通過以下代碼飛槳框架中提供了哪些數(shù)據(jù)集。
import paddle
print(‘視覺相關(guān)數(shù)據(jù)集:’, paddle.vision.datasets.all)
print(‘自然語言相關(guān)數(shù)據(jù)集:’, paddle.text.datasets.all)
視覺相關(guān)數(shù)據(jù)集: [‘DatasetFolder’, ‘ImageFolder’, ‘MNIST’, ‘FashionMNIST’, ‘Flowers’, ‘Cifar10’, ‘Cifar100’, ‘VOC2012’]
自然語言相關(guān)數(shù)據(jù)集: [‘Conll05st’, ‘Imdb’, ‘Imikolov’, ‘Movielens’, ‘UCIHousing’, ‘WMT14’, ‘WMT16’]
警告
除paddle.vision.dataset與paddle.text.dataset外,飛槳框架還內(nèi)置了另一套數(shù)據(jù)集,路徑為paddle.dataset.*,但是該數(shù)據(jù)集的使用方式較老,會在未來的版本廢棄,盡量不要使用該目錄下數(shù)據(jù)集的API。
這里可以定義手寫數(shù)字體的數(shù)據(jù)集,其它數(shù)據(jù)集的使用方式也都類似。用mode來標識訓練集與測試集。數(shù)據(jù)集接口會自動從遠端下載數(shù)據(jù)集到本機緩存目錄~/.cache/paddle/dataset。
from paddle.vision.transforms import ToTensor

訓練數(shù)據(jù)集 用ToTensor將數(shù)據(jù)格式轉(zhuǎn)為Tensor

train_dataset = paddle.vision.datasets.MNIST(mode=‘train’, transform=ToTensor())

驗證數(shù)據(jù)集

val_dataset = paddle.vision.datasets.MNIST(mode=‘test’, transform=ToTensor())
二、自定義數(shù)據(jù)集
在實際的場景中,更多需要使用已有的相關(guān)數(shù)據(jù)來定義數(shù)據(jù)集。可以使用飛槳提供的paddle.io.Dataset基類,來快速實現(xiàn)自定義數(shù)據(jù)集。
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):
“”"
步驟二:實現(xiàn)構(gòu)造函數(shù),定義數(shù)據(jù)集大小
“”"
super(MyDataset, self).init()
self.num_samples = num_samples

def __getitem__(self, index):"""步驟三:實現(xiàn)__getitem__方法,定義指定index時如何獲取數(shù)據(jù),并返回單條數(shù)據(jù)(訓練數(shù)據(jù),對應(yīng)的標簽)"""data = paddle.uniform(IMAGE_SIZE, dtype='float32')label = paddle.randint(0, CLASS_NUM-1, dtype='int64')return data, labeldef __len__(self):"""步驟四:實現(xiàn)__len__方法,返回數(shù)據(jù)集總數(shù)目"""return self.num_samples

測試定義的數(shù)據(jù)集

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]
通過以上的方式,就可以根據(jù)實際場景,構(gòu)造自己的數(shù)據(jù)集。
三、數(shù)據(jù)加載
飛槳推薦使用paddle.io.DataLoader完成數(shù)據(jù)的加載。簡單的示例如下:
train_loader = paddle.io.DataLoader(custom_dataset, batch_size=BATCH_SIZE, shuffle=True)

如果要加載內(nèi)置數(shù)據(jù)集,將 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]
通過上述的方法,就定義了一個數(shù)據(jù)迭代器train_loader, 用于加載訓練數(shù)據(jù)。通過batch_size=64設(shè)置了數(shù)據(jù)集的批大小為64,通過shuffle=True,在取數(shù)據(jù)前會打亂數(shù)據(jù)。此外,還可以通過設(shè)置num_workers來開啟多進程數(shù)據(jù)加載,提升加載速度。
注解
DataLoader 默認用異步加載數(shù)據(jù)的方式來讀取數(shù)據(jù),一方面可以提升數(shù)據(jù)加載的速度,另一方面也會占據(jù)更少的內(nèi)存。如果需要同時加載全部數(shù)據(jù)到內(nèi)存中,設(shè)置use_buffer_reader=False。

總結(jié)

以上是生活随笔為你收集整理的深度学习数据集定义与加载的全部內(nèi)容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網(wǎng)站內(nèi)容還不錯,歡迎將生活随笔推薦給好友。