欧美bbbwbbbw肥妇,免费乱码人妻系列日韩,一级黄片

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

 更新時(shí)間:2023年09月11日 16:45:34   作者:czg792845236  
這篇文章主要介紹了Pytorch Dataset,TensorDataset,Dataloader,Sampler關(guān)系,具有很好的參考價(jià)值,希望對(duì)大家有所幫助,如有錯(cuò)誤或未考慮完全的地方,望不吝賜教

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è)置為T(mén)rue后可刪除最后一個(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示例

所以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í)現(xiàn)統(tǒng)計(jì)單詞出現(xiàn)的個(gè)數(shù)

    Python實(shí)現(xiàn)統(tǒng)計(jì)單詞出現(xiàn)的個(gè)數(shù)

    這篇文章主要介紹了Python實(shí)現(xiàn)統(tǒng)計(jì)單詞出現(xiàn)的個(gè)數(shù),本文給出了實(shí)現(xiàn)代碼以及使用方法,需要的朋友可以參考下
    2015-05-05
  • python文件讀寫(xiě)代碼實(shí)例

    python文件讀寫(xiě)代碼實(shí)例

    這篇文章主要介紹了python文件讀寫(xiě)代碼實(shí)例,文中通過(guò)示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友可以參考下
    2019-10-10
  • 解決python tkinter界面卡死的問(wèn)題

    解決python tkinter界面卡死的問(wèn)題

    今天小編就為大家分享一篇解決python tkinter界面卡死的問(wèn)題,具有很好的參考價(jià)值,希望對(duì)大家有所幫助。一起跟隨小編過(guò)來(lái)看看吧
    2019-07-07
  • Python中的集合類型知識(shí)講解

    Python中的集合類型知識(shí)講解

    這篇文章主要介紹了Python中的集合類型知識(shí)講解,是Python入門(mén)學(xué)習(xí)中的基礎(chǔ)知識(shí),需要的朋友可以參考下
    2015-08-08
  • Python編程中被忽視的核心技巧總結(jié)

    Python編程中被忽視的核心技巧總結(jié)

    這篇文章主要介紹了一些在?Python?編程中可能被忽視的核心功能,包括默認(rèn)參數(shù)、海象運(yùn)算符、*args?和?**kwargs?的使用等,需要的可參考下
    2023-08-08
  • 使用Python實(shí)現(xiàn)有趣的鎖屏小工具

    使用Python實(shí)現(xiàn)有趣的鎖屏小工具

    這篇文章主要為大家詳細(xì)介紹了如何使用Python實(shí)現(xiàn)有趣的鎖屏小工具,這樣再也不用擔(dān)心因?yàn)闆](méi)有鎖屏被扣工資啦,打工人快跟隨小編一起學(xué)習(xí)一下吧
    2023-12-12
  • 使用?PyQt5?設(shè)計(jì)下載遠(yuǎn)程服務(wù)器日志文件程序的思路

    使用?PyQt5?設(shè)計(jì)下載遠(yuǎn)程服務(wù)器日志文件程序的思路

    這篇文章主要介紹了使用?PyQt5?設(shè)計(jì)下載遠(yuǎn)程服務(wù)器日志文件程序,借助 PyQt5 強(qiáng)大的能力,我們可以通過(guò)“拖拉拽”的形式很容易地實(shí)現(xiàn)桌面端程序,只需要將原來(lái)的 Python 腳本綁定到 UI 程序的事件中,就實(shí)現(xiàn)了命令行程序到桌面程序的演進(jìn),需要的朋友可以參考下
    2022-11-11
  • Python文件夾與文件的操作實(shí)現(xiàn)代碼

    Python文件夾與文件的操作實(shí)現(xiàn)代碼

    最近在寫(xiě)的程序頻繁地與文件操作打交道,這塊比較弱,還好在百度上找到一篇不錯(cuò)的文章,這是原文傳送門(mén),我對(duì)原文稍做了些改動(dòng)
    2014-07-07
  • Python多線程爬蟲(chóng)簡(jiǎn)單示例

    Python多線程爬蟲(chóng)簡(jiǎn)單示例

    這篇文章主要為大家詳細(xì)介紹了Python多線程爬蟲(chóng)簡(jiǎn)單示例,感興趣的小伙伴們可以參考一下
    2016-03-03
  • python 從csv讀數(shù)據(jù)到mysql的實(shí)例

    python 從csv讀數(shù)據(jù)到mysql的實(shí)例

    今天小編就為大家分享一篇python 從csv讀數(shù)據(jù)到mysql的實(shí)例,具有很好的參考價(jià)值,希望對(duì)大家有所幫助。一起跟隨小編過(guò)來(lái)看看吧
    2018-06-06

最新評(píng)論