淺談PyTorch的數(shù)據(jù)讀取機制Dataloader與Dataset
Dataloader與DataSet數(shù)據(jù)讀取方法
DataLoader與DataSet是PyTorch數(shù)據(jù)讀取的核心。
“torch.utils.DataLoader”的作用是構(gòu)建一個可迭代的數(shù)據(jù)裝載器,每次執(zhí)行循環(huán)的時候,就從中讀取一批Batchsize大小的樣本進行訓練。
其主要參數(shù)有五項:
- dataset:隸屬DataSet類,表示數(shù)據(jù)從哪里讀取以及如何讀取
- batchsize:批大小
- num_works:是否多進程讀取數(shù)據(jù)
- shuffle:每個epoch是否亂序
- drop_last:當樣本數(shù)不能被batchsize整除時,是否舍棄最后一批數(shù)據(jù)
上述主要參數(shù)中num_works通常在單進程時默認為“0”,也可以在支持多進程的設(shè)備上設(shè)置為允許的“4 | 8 | 16”等。
shuffle則通常設(shè)置為使用亂序(True),以使得每次數(shù)據(jù)讀取具有隨機性。
這里頗為重要的是“Epoch、Iteration和Batchsize”之間的關(guān)系:
1)Epoch表示所有訓練樣本都已輸入到模型中,記為一個Epoch;
2)Iteration表示一批樣本輸入到模型中,記為一個Iteration;
3)Batchsize表示批大小,決定一個Epoch中有多少個Iteration。當樣本數(shù)可以被Batchsize整除時,三者成立關(guān)系,即全體樣本分成Batchsize分批次輸入模型,每批次記為一次Iteration。
若樣本總數(shù)80個,當Batchsize=8時,可以知道“1 Epoch = 10 Iteration”。
若樣本總數(shù)87個,當Batchsize-8時,可以知道:1)若“drop_last=True”,則“1 Epoch = 10 Iteration”;2)
若“drop_last=False”,則“1 Epoch = 11 Iteration”,其最后一個Iteration時樣本個數(shù)為7,小于既定Batchsize。
“torch.utils.data.Dataset”主要用于定義數(shù)據(jù)從哪里讀取以及如何讀取的問題。其定義為DataSet抽象類,所有自定義的Dataset都需要繼承它,并復(fù)寫“getitem()”內(nèi)構(gòu)函數(shù),該函數(shù)接受一個索引,并返回一個樣本。

DataLoader與DataSet數(shù)據(jù)讀取機制
PyTorch的數(shù)據(jù)讀取機制通常圍繞三個核心問題展開,即:
讀取哪些數(shù)據(jù)?從哪里讀取數(shù)據(jù)?怎么讀取數(shù)據(jù)?
事實上,通過在PyCharm中進行代碼調(diào)試,我們可以簡要回答上述問題:
1)通過Sampler取樣器按序或隨機挑選出Batchsize數(shù)量的索引列表;
2)使用DataSet中的data_dir指定硬盤上的數(shù)據(jù)訪問路徑;
3)使用DataSet中自定義的getitem()方法,基于Sampler返回的索引列表讀取相應(yīng)數(shù)據(jù)和標簽,并拼接成新的列表數(shù)據(jù)。

事實上,PyTorch的數(shù)據(jù)讀取經(jīng)過了諸多函數(shù)的跳轉(zhuǎn)。在for循環(huán)中首先調(diào)用了“DataLoader”,進而使用Sampler、Dataset和getitem解決“數(shù)據(jù)讀哪些?從哪讀?怎么讀?”的問題。
最后,我們提供一份PyTorch中DataLoader數(shù)據(jù)讀取機制的函數(shù)跳轉(zhuǎn)流程圖,供大家參考學習。

到此這篇關(guān)于淺談PyTorch的數(shù)據(jù)讀取機制Dataloader與Dataset的文章就介紹到這了,更多相關(guān)PyTorch的Dataloader與Dataset內(nèi)容請搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持腳本之家!
相關(guān)文章
Python腳本實現(xiàn)音頻和視頻格式轉(zhuǎn)換
這篇文章主要為大家詳細介紹了Python如何通過腳本實現(xiàn)音頻和視頻格式轉(zhuǎn)換,文中的示例代碼講解詳細,感興趣的小伙伴可以跟隨小編一起學習一下2025-03-03
python3實現(xiàn)TCP協(xié)議的簡單服務(wù)器和客戶端案例(分享)
下面小編就為大家?guī)硪黄猵ython3實現(xiàn)TCP協(xié)議的簡單服務(wù)器和客戶端案例(分享)。小編覺得挺不錯的,現(xiàn)在就分享給大家,也給大家做個參考。一起跟隨小編過來看看吧2017-06-06
Python自動化辦公之定時發(fā)送郵件的實現(xiàn)
python中的schedule模塊可以使我們方便簡單的使用定時任務(wù),即在特定的時間自動的執(zhí)行一些任務(wù)的功能,本文將用這一模塊實現(xiàn)郵件自動發(fā)送,需要的可以參考一下2022-05-05
python中的?sorted()函數(shù)和sort()方法區(qū)別
這篇文章主要介紹了python中的?sorted()函數(shù)和sort()方法,首先看sort()方法,sort方法只能對列表進行操作,而sorted可用于所有的可迭代對象。具體內(nèi)容需要的小伙伴可以參考下面章節(jié)2022-02-02
Django+Ajax+jQuery實現(xiàn)網(wǎng)頁動態(tài)更新的實例
今天小編就為大家分享一篇Django+Ajax+jQuery實現(xiàn)網(wǎng)頁動態(tài)更新的實例,具有很好的參考價值,希望對大家有所幫助。一起跟隨小編過來看看吧2018-05-05
解決pyecharts運行后產(chǎn)生的html文件用瀏覽器打開空白
這篇文章主要介紹了解決pyecharts運行后產(chǎn)生的html文件用瀏覽器打開空白,文中通過示例代碼介紹的非常詳細,對大家的學習或者工作具有一定的參考學習價值,需要的朋友們下面隨著小編來一起學習學習吧2020-03-03

