最新国产好看的视频,伊人天堂AV在线,国产Aaaaaa视频,蜜臀视频在线观看一区,人妻av色图,密臀久久久精品影片,青青视频免费观看毛片,久草在线观看视,国产三级精品色情在线

Pytorch中TensorDataset與DataLoader的使用方式

 更新時(shí)間:2023年09月09日 08:50:11   作者:Arxan_hjw  
這篇文章主要介紹了Pytorch中TensorDataset與DataLoader的使用方式,具有很好的參考價(jià)值,希望對(duì)大家有所幫助,如有錯(cuò)誤或未考慮完全的地方,望不吝賜教

TensorDataset與DataLoader的使用

TensorDataset

TensorDataset本質(zhì)上與python zip方法類似,對(duì)數(shù)據(jù)進(jìn)行打包整合。

官方文檔說(shuō)明:

**Dataset wrapping tensors.

Each sample will be retrieved by indexing tensors along the first dimension.*

Parameters:
tensors (Tensor) – tensors that have the same size of the first dimension.

該類通過(guò)每一個(gè) tensor 的第一個(gè)維度進(jìn)行索引。

因此,該類中的 tensor 第一維度必須相等。

import torch
from torch.utils.data import TensorDataset
# a的形狀為(4*3)
a = torch.tensor([[1,1,1],[2,2,2],[3,3,3],[4,4,4]])
# b的第一維與a相同
b = torch.tensor([1,2,3,4])
train_data = TensorDataset(a,b)
print(train_data[0:4])

輸出結(jié)果如下:

(tensor([[1, 1, 1],
        [2, 2, 2],
        [3, 3, 3],
        [4, 4, 4]]), tensor([1, 2, 3, 4]))

DataLoader

DataLoader本質(zhì)上就是一個(gè)iterable(跟python的內(nèi)置類型list等一樣),并利用多進(jìn)程來(lái)加速batch data的處理,使用yield來(lái)使用有限的內(nèi)存。

import torch
from torch.utils.data import TensorDataset
from torch.utils.data import DataLoader
a = torch.tensor([[1,1,1],[2,2,2],[3,3,3],[4,4,4]])
b = torch.tensor([1,2,3,4])
train_data = TensorDataset(a,b)
data = DataLoader(train_data, batch_size=2, shuffle=True)
for i, j in enumerate(data):
? ? x, y = j
? ? print(' batch:{0} x:{1} ?y: {2}'.format(i, x, y))

輸出:

 batch:0 x:tensor([[1, 1, 1],
        [2, 2, 2]])  y: tensor([1, 2])
 batch:1 x:tensor([[4, 4, 4],
        [3, 3, 3]])  y: tensor([4, 3])

Pytorch Dataset,TensorDataset,Dataloader,Sampler關(guān)系

Dataloader

Dataloader是數(shù)據(jù)加載器,組合數(shù)據(jù)集和采樣器,并在數(shù)據(jù)集上提供單線程或多線程的迭代器。

所以Dataloader的參數(shù)必然需要指定數(shù)據(jù)集Dataset和采樣器Sampler。

class torch.utils.data.DataLoader(dataset, batch_size=1, shuffle=False, sampler=None, num_workers=0, collate_fn=<function default_collate>, pin_memory=False, drop_last=False)
  • dataset (Dataset) – 數(shù)據(jù)集。
  • batch_size (int, optional) – 每個(gè)batch加載樣本數(shù)。
  • shuffle (bool, optional) – True則打亂數(shù)據(jù).
  • sampler (Sampler, optional) – 采樣器,如指定則忽略shuffle參數(shù)。
  • num_workers (int, optional) – 用多少個(gè)子進(jìn)程加載數(shù)據(jù)。0表示數(shù)據(jù)將在主進(jìn)程中加載
  • collate_fn (callable, optional) – 獲取batch數(shù)據(jù)的回調(diào)函數(shù),也就是說(shuō)可以在這個(gè)函數(shù)中修改batch的形式
  • pin_memory (bool, optional) –
  • drop_last (bool, optional) – 如果數(shù)據(jù)集大小不能被batch size整除,則設(shè)置為True后可刪除最后一個(gè)不完整的batch。如果設(shè)為False并且數(shù)據(jù)集的大小不能被batch size整除,則最后一個(gè)batch將更小。

Dataset和TensorDataset

所有其他數(shù)據(jù)集都應(yīng)該進(jìn)行子類化。所有子類應(yīng)該override __len__ __getitem__ ,前者提供了數(shù)據(jù)集的大小,后者支持整數(shù)索引,范圍從0到len(self)。

TensorDataset是Dataset的子類,已經(jīng)復(fù)寫(xiě)了 __len__ __getitem__ 方法,只要傳入張量即可,它通過(guò)第一個(gè)維度進(jìn)行索引。

所以TensorDataset說(shuō)白了就是將輸入的tensors捆綁在一起,然后 __len__ 是任何一個(gè)tensor的維度, __getitem__ 表示每個(gè)tensor取相同的索引,然后將這個(gè)結(jié)果組成一個(gè)元組,源碼如下,要好好理解它通過(guò)第一個(gè)維度進(jìn)行索引的意思(針對(duì)tensors里面的每一個(gè)tensor而言)。

class TensorDataset(Dataset):
	def __init__(self,*tensors):
		assert all(tensors[0].size(0)==tensor.size(0) for tensor in tensors)
		self.tensors = tensors
	def __getitem__(self,index):
		return tuple(tensor[index] for tensor in self.tensors)
	def __len__(self):
		return self.tensors[0].size(0)

Sampler和RandomSampler

Sampler與Dataset類似,是采樣器的基礎(chǔ)類。

每個(gè)采樣器子類必須提供一個(gè) __iter__ 方法,提供一種迭代數(shù)據(jù)集元素的索引的方法,以及返回迭代器長(zhǎng)度的 __len__ 方法。

所以Sampler必然是關(guān)于索引的迭代器,也就是它的輸出是索引。

而RandomSampler與TensorDataset類似,RandomSamper已經(jīng)實(shí)現(xiàn)了 __iter__ __len__ 方法,只需要傳入數(shù)據(jù)集即可。

猜想理解RandomSampler的實(shí)現(xiàn)方式,考慮到這個(gè)類實(shí)現(xiàn)需要傳入Dataset,所以 __len__ 就是Dataset的 __len__ ,然后 __iter__ 就可以隨便搞一個(gè)隨機(jī)函數(shù)對(duì)range(length)隨機(jī)即可。

綜合示例

結(jié)合TensorDataset和RandomSampler使用Dataloader

這里即可理解Dataloader這個(gè)數(shù)據(jù)加載器其實(shí)就是組合數(shù)據(jù)集和采樣器的組合。所以那就是先根據(jù)Sampler隨機(jī)拿到一個(gè)索引,再用這個(gè)索引到Dataset中取tensors里每個(gè)tensor對(duì)應(yīng)索引的數(shù)據(jù)來(lái)組成一個(gè)元組。

總結(jié)

以上為個(gè)人經(jīng)驗(yàn),希望能給大家一個(gè)參考,也希望大家多多支持腳本之家。

相關(guān)文章

  • 使用Python去除小數(shù)點(diǎn)后面多余的0問(wèn)題

    使用Python去除小數(shù)點(diǎn)后面多余的0問(wèn)題

    這篇文章主要介紹了使用Python去除小數(shù)點(diǎn)后面多余的0問(wèn)題,具有很好的參考價(jià)值,希望對(duì)大家有所幫助。如有錯(cuò)誤或未考慮完全的地方,望不吝賜教
    2022-07-07
  • python連接sqlite3簡(jiǎn)單用法完整例子

    python連接sqlite3簡(jiǎn)單用法完整例子

    SQLite3是一個(gè)內(nèi)置的Python模塊,可以通過(guò)Python的標(biāo)準(zhǔn)庫(kù)輕松地使用,無(wú)需進(jìn)行額外安裝和配置,這篇文章主要介紹了python連接sqlite3簡(jiǎn)單用法的相關(guān)資料,需要的朋友可以參考下
    2025-08-08
  • Python與Java進(jìn)行交互操作的方法與性能對(duì)比

    Python與Java進(jìn)行交互操作的方法與性能對(duì)比

    這篇文章主要為大家詳細(xì)介紹了Python與Java進(jìn)行交互操作的相關(guān)方法,包括子進(jìn)程調(diào)用,JPype,Py4J和REST/gRPC,并進(jìn)行了性能對(duì)比,感興趣的小伙伴可以了解下
    2025-04-04
  • python中yield函數(shù)的用法詳解

    python中yield函數(shù)的用法詳解

    這篇文章主要為大家詳細(xì)介紹了python中yield函數(shù)的用法,數(shù)據(jù)庫(kù),文中示例代碼介紹的非常詳細(xì),具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下
    2022-02-02
  • NumPy統(tǒng)計(jì)函數(shù)的實(shí)現(xiàn)方法

    NumPy統(tǒng)計(jì)函數(shù)的實(shí)現(xiàn)方法

    這篇文章主要介紹了NumPy統(tǒng)計(jì)函數(shù)的實(shí)現(xiàn)方法,文中通過(guò)示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來(lái)一起學(xué)習(xí)學(xué)習(xí)吧
    2020-01-01
  • 一文帶你掌握Python中textwrap庫(kù)文本包裝的藝術(shù)

    一文帶你掌握Python中textwrap庫(kù)文本包裝的藝術(shù)

    在Python編程中,處理文本是一項(xiàng)基礎(chǔ)且常見(jiàn)的任務(wù),textwrap模塊正是為此而生,它提供了一系列簡(jiǎn)單而強(qiáng)大的工具,幫助我們優(yōu)雅地完成文本包裝和格式化工作,下面就跟隨小編來(lái)看看它的具體使用吧
    2024-12-12
  • 使用Python簡(jiǎn)單實(shí)現(xiàn)去除彩色水印

    使用Python簡(jiǎn)單實(shí)現(xiàn)去除彩色水印

    這篇文章主要為大家詳細(xì)介紹了如何使用Python簡(jiǎn)單實(shí)現(xiàn)去除彩色水印效果,文中的示例代碼講解詳細(xì),感興趣的小伙伴可以跟隨小編一起學(xué)習(xí)一下
    2025-02-02
  • 實(shí)例講解Python中sys.argv[]的用法

    實(shí)例講解Python中sys.argv[]的用法

    在閱讀facenet網(wǎng)絡(luò)的代碼的時(shí)候,遇到了sys.argv[]這個(gè)函數(shù),所以下面這篇文章主要給大家介紹了關(guān)于Python中sys.argv[]用法的相關(guān)資料,需要的朋友可以參考下
    2021-06-06
  • 基于PyQt6開(kāi)發(fā)Windows時(shí)間校時(shí)同步工具

    基于PyQt6開(kāi)發(fā)Windows時(shí)間校時(shí)同步工具

    在現(xiàn)代計(jì)算機(jī)應(yīng)用中,準(zhǔn)確的時(shí)間同步至關(guān)重要,無(wú)論是金融交易、日志記錄還是分布式系統(tǒng)協(xié)同,毫秒級(jí)的時(shí)間誤差都可能導(dǎo)致嚴(yán)重問(wèn)題,所以本文介紹了基于PyQt6的Windows時(shí)間校時(shí)同步工具開(kāi)發(fā)全攻略,需要的朋友可以參考下
    2025-05-05
  • python溫度轉(zhuǎn)換華氏溫度實(shí)現(xiàn)代碼

    python溫度轉(zhuǎn)換華氏溫度實(shí)現(xiàn)代碼

    這篇文章主要介紹了python溫度轉(zhuǎn)換華氏溫度實(shí)現(xiàn)代碼內(nèi)容,有需要的朋友們可以測(cè)試下。
    2020-12-12

最新評(píng)論

右玉县| 哈密市| 广宁县| 平舆县| 淅川县| 林口县| 台中市| 抚远县| 陇川县| 宁津县| 临城县| 靖边县| 浠水县| 钟祥市| 南木林县| 墨江| 广西| 塔河县| 颍上县| 金华市| 乌审旗| 玛纳斯县| 漯河市| 永吉县| 赫章县| 庐江县| 龙胜| 柘城县| 北京市| 尉氏县| 朝阳市| 吕梁市| 新化县| 滦平县| 诸城市| 东港市| 二连浩特市| 阳曲县| 门源| 莒南县| 清水河县|