亚洲乱码中文字幕综合,中国熟女仑乱hd,亚洲精品乱拍国产一区二区三区,一本大道卡一卡二卡三乱码全集资源,又粗又黄又硬又爽的免费视频

Pytorch Dataset,TensorDataset,Dataloader,Sampler關系解讀

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

Dataloader

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

所以Dataloader的參數必然需要指定數據集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) – 數據集。
  • batch_size (int, optional) – 每個batch加載樣本數。
  • shuffle (bool, optional) – True則打亂數據.
  • sampler (Sampler, optional) – 采樣器,如指定則忽略shuffle參數。
  • num_workers (int, optional) – 用多少個子進程加載數據。0表示數據將在主進程中加載
  • collate_fn (callable, optional) – 獲取batch數據的回調函數,也就是說可以在這個函數中修改batch的形式
  • pin_memory (bool, optional) –
  • drop_last (bool, optional) – 如果數據集大小不能被batch size整除,則設置為True后可刪除最后一個不完整的batch。如果設為False并且數據集的大小不能被batch size整除,則最后一個batch將更小。

Dataset和TensorDataset

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

TensorDataset是Dataset的子類,已經復寫了 __len__ __getitem__ 方法,只要傳入張量即可,它通過第一個維度進行索引。

TensorDataset示例

所以TensorDataset說白了就是將輸入的tensors捆綁在一起,然后 __len__ 是任何一個tensor的維度, __getitem__ 表示每個tensor取相同的索引,然后將這個結果組成一個元組,源碼如下,要好好理解它通過第一個維度進行索引的意思(針對tensors里面的每一個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類似,是采樣器的基礎類。

每個采樣器子類必須提供一個 __iter__ 方法,提供一種迭代數據集元素的索引的方法,以及返回迭代器長度的 __len__ 方法。

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

而RandomSampler與TensorDataset類似,RandomSamper已經實現了 __iter__ __len__ 方法,只需要傳入數據集即可。

在這里插入圖片描述

猜想理解RandomSampler的實現方式,考慮到這個類實現需要傳入Dataset,所以 __len__ 就是Dataset的 __len__ ,然后 __iter__ 就可以隨便搞一個隨機函數對range(length)隨機即可。

綜合示例

結合TensorDataset和RandomSampler使用Dataloader

這里即可理解Dataloader這個數據加載器其實就是組合數據集和采樣器的組合。

所以那就是先根據Sampler隨機拿到一個索引,再用這個索引到Dataset中取tensors里每個tensor對應索引的數據來組成一個元組。

總結

以上為個人經驗,希望能給大家一個參考,也希望大家多多支持腳本之家。

相關文章

  • Python實現統(tǒng)計單詞出現的個數

    Python實現統(tǒng)計單詞出現的個數

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

    python文件讀寫代碼實例

    這篇文章主要介紹了python文件讀寫代碼實例,文中通過示例代碼介紹的非常詳細,對大家的學習或者工作具有一定的參考學習價值,需要的朋友可以參考下
    2019-10-10
  • 解決python tkinter界面卡死的問題

    解決python tkinter界面卡死的問題

    今天小編就為大家分享一篇解決python tkinter界面卡死的問題,具有很好的參考價值,希望對大家有所幫助。一起跟隨小編過來看看吧
    2019-07-07
  • Python中的集合類型知識講解

    Python中的集合類型知識講解

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

    Python編程中被忽視的核心技巧總結

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

    使用Python實現有趣的鎖屏小工具

    這篇文章主要為大家詳細介紹了如何使用Python實現有趣的鎖屏小工具,這樣再也不用擔心因為沒有鎖屏被扣工資啦,打工人快跟隨小編一起學習一下吧
    2023-12-12
  • 使用?PyQt5?設計下載遠程服務器日志文件程序的思路

    使用?PyQt5?設計下載遠程服務器日志文件程序的思路

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

    Python文件夾與文件的操作實現代碼

    最近在寫的程序頻繁地與文件操作打交道,這塊比較弱,還好在百度上找到一篇不錯的文章,這是原文傳送門,我對原文稍做了些改動
    2014-07-07
  • Python多線程爬蟲簡單示例

    Python多線程爬蟲簡單示例

    這篇文章主要為大家詳細介紹了Python多線程爬蟲簡單示例,感興趣的小伙伴們可以參考一下
    2016-03-03
  • python 從csv讀數據到mysql的實例

    python 從csv讀數據到mysql的實例

    今天小編就為大家分享一篇python 從csv讀數據到mysql的實例,具有很好的參考價值,希望對大家有所幫助。一起跟隨小編過來看看吧
    2018-06-06

最新評論