Dataset 和 Dataloader資料載入

2021-10-20 19:14:23 字數 2185 閱讀 3292

初學pytorch, 一直分不清資料是如何載入的,分不清dataset 和 dataloader的聯絡。

utils包含dataset和dataloader兩個類。自定義資料集需要繼承這個類,並實現兩個函式,乙個是__len__,另乙個是__getitem__,前者提供資料的大小,後者通過索引獲取資料和標籤。

__getitem__一次只能獲取乙個資料,所以需要通過dataloader來定義乙個新的迭代器,實現batch讀取。

下面舉乙個直觀的小例子來搞明白是怎麼回事!

import torch

from torch.utils import data

import numpy as np

'''資料集:

label:data

0:[1, 2],

1:[3, 4],

0:[2, 1],

1:[3, 4],

2:[4, 5]

'''class

textdataset

(data.dataset)

:# 繼承dataset

def__init__

(self)

: self.data = np.asarray([[

1,2]

,[3,

4],[

2,1]

,[3,

4],[

4,5]

])# 一些由2維向量表示的資料集

self.label = np.asarray([0

,1,0

,1,2

])# 資料集對應的標籤

def__getitem__

(self, item)

: text = torch.from_numpy(self.data[item]

)# 把numpy轉化為tensor

label = torch.tensor(self.label[item]

)return text, label

def__len__

(self)

:return

len(self.data)

# 獲取資料集中資料

test = textdataset(

)print

(test[3]

)# 相當於呼叫getitem(3)

# 輸出:

# (tensor([3, 4], dtype=torch.int32), tensor(1, dtype=torch.int32))

以上資料以tuple 返回,每次只返回乙個樣本,如果希望批量處理batch,需要用到dataloader

test_loader = data.dataloader(test,batch_size=

2,shuffle=

false

)for i, traindata in

enumerate

(test_loader)

:print

("i:"

,i) data, label = traindata

print

("data:"

, data)

# 其中乙個data包含2組資料,乙個batch大小

print

("label:"

, label)

# 輸出:

# i: 0

# data: tensor([[1, 2],

# [3, 4]], dtype=torch.int32)

# label: tensor([0, 1], dtype=torch.int32)

# i: 1

# data: tensor([[2, 1],

# [3, 4]], dtype=torch.int32)

# label: tensor([0, 1], dtype=torch.int32)

# i: 2

# data: tensor([[4, 5]], dtype=torch.int32)

# label: tensor([2], dtype=torch.int32)

其中乙個data變成原來兩組data的組成

相應的label也變成了原來對應的兩個label的組成

.參考於吳茂貴的python深度學習

datareader和dataset的區別

dataset是乙個記憶體資料庫,你取資料的時候可以把資料放進去,資料取完就可以斷開連線了,這樣你就可以在dataset中去取資料,和資料庫就無關了。這樣非常方便,但有個問題,你把資料放記憶體裡,是要占用記憶體空間的,如果這個dataset中放了很多資料的話,效率就有問題了,你在乙個大的datase...

DataReader和DataSet的區別

1.datareader是資料管理提供者類,而dataset是一般性資料類。2.dataset獲取資料需要通過橋梁dataadapter的填充,由於datareader本身就是管理提供者,它可以通過command的executereader 方法就可以獲取資料。4.datareader只能正向讀取資...

DataSet和DataReader的適用環境

ado.net2.0提供了兩個用於檢索關係資料的物件 dataset和datareader。並且這兩個物件都可以將檢索的關係資料儲存在記憶體中。在軟體開發過程中經常用到這兩個控制項,由於這兩個控制項在使用和功能方面的相似,很多程式設計師錯誤地認為dataset和datareader是可以相互替代的。...