日韩av黄I国产麻豆传媒I国产91av视频在线观看I日韩一区二区三区在线看I美女国产在线I麻豆视频国产在线观看I成人黄色短片

歡迎訪問 生活随笔!

生活随笔

當(dāng)前位置: 首頁 >

PyTorch框架学习八——PyTorch数据读取机制(简述)

發(fā)布時間:2024/7/23 51 豆豆
生活随笔 收集整理的這篇文章主要介紹了 PyTorch框架学习八——PyTorch数据读取机制(简述) 小編覺得挺不錯的,現(xiàn)在分享給大家,幫大家做個參考.

PyTorch框架學(xué)習(xí)八——PyTorch數(shù)據(jù)讀取機制(簡述)

  • 一、數(shù)據(jù)
  • 二、DataLoader與Dataset
    • 1.torch.utils.data.DataLoader
    • 2.torch.utils.data.Dataset
  • 三、數(shù)據(jù)讀取整體流程

琢磨了一段時間,終于對PyTorch的數(shù)據(jù)讀取機制有了一點理解,并自己實現(xiàn)了簡單數(shù)據(jù)集(貓狗分類數(shù)據(jù)集)的讀入和訓(xùn)練,這里簡單寫一寫自己的理解,以備日后回顧。

一、數(shù)據(jù)

簡單來說,一個機器學(xué)習(xí)或深度學(xué)習(xí)問題可以拆解為五個主要的部分:數(shù)據(jù)、模型、損失函數(shù)、優(yōu)化器和迭代過程,這五部分每個都可以詳細(xì)展開,都有非常多的知識點,而一切的開始,都源于數(shù)據(jù)。

一般數(shù)據(jù)部分可以分為四個主要的內(nèi)容去學(xué)習(xí):

  • 數(shù)據(jù)收集:即獲取Img和相應(yīng)的Label。
  • 數(shù)據(jù)劃分:劃分為訓(xùn)練集、驗證集和測試集。
  • 數(shù)據(jù)讀取:DataLoader。
  • 數(shù)據(jù)預(yù)處理:transforms。
  • 在PyTorch框架的學(xué)習(xí)中,前兩個不是重點,它們是機器學(xué)習(xí)基礎(chǔ)和Python基礎(chǔ)的事。而PyTorch的數(shù)據(jù)預(yù)處理transforms方法在前幾次筆記進(jìn)行了很詳細(xì)地介紹,這次筆記重點是寫一點對數(shù)據(jù)讀取機制的理解,這也是最折磨的一部分,經(jīng)過了很多次的步進(jìn)演示,終于對整個數(shù)據(jù)讀取過程有了一個較為完整的印象。

    總的來說,DataLoader里比較重要的是Sampler和Dataset,前者負(fù)責(zé)獲取要讀取的數(shù)據(jù)的索引,即讀哪些數(shù)據(jù),后者決定數(shù)據(jù)從哪里讀取以及如何讀取。

    二、DataLoader與Dataset

    1.torch.utils.data.DataLoader

    功能:構(gòu)建可迭代的數(shù)據(jù)裝載器。

    torch.utils.data.DataLoader(dataset, batch_size=1, shuffle=False, sampler=None, batch_sampler=None, num_workers=0, collate_fn=None, pin_memory=False, drop_last=False, timeout=0, worker_init_fn=None, multiprocessing_context=None, generator=None)

    參數(shù)比較多,如下所示:

    介紹幾個主要的:

  • dataset:Dataset類,決定數(shù)據(jù)從哪讀取以及如何讀取。
  • batch_size:批大小,默認(rèn)為1。
  • num_works:是否多進(jìn)程讀取數(shù)據(jù)。
  • shuffle:每個epoch是否亂序。
  • drop_last:當(dāng)樣本數(shù)不能被batch_size整除時,是否舍棄最后一批數(shù)據(jù)。
  • 上面涉及到一個小知識點,順帶介紹一下,即Epoch、Iteration、Batchsize之間的關(guān)系:

  • Epoch:所有訓(xùn)練樣本都輸入到模型中,稱為一個epoch。
  • Iteration:一個Batch的樣本輸入到模型中,稱為一個Iteration。
  • Batchsize:批大小,決定一個epoch有多少個iteration。
  • 舉個栗子:

    若樣本總數(shù):80,Batchsize:8,則 1 Epoch = 10 Iterations。
    若樣本總數(shù):87,Batchsize:8,且 drop_last = True,則1 Epoch = 10 Iterations;而drop_last = False時,1 Epoch = 11 Iterations。

    2.torch.utils.data.Dataset

    功能:Dataset抽象類,所有自定義的Dataset需要繼承它,并且復(fù)寫__getitem__()函數(shù)。
    這里__getitem__()函數(shù)的功能是:接收一個索引,返回一個樣本。

    三、數(shù)據(jù)讀取整體流程

    經(jīng)過上面簡單的介紹,下面來看一下數(shù)據(jù)讀取的整體流程:

  • 從DataLoader這個命令開始。
  • 然后進(jìn)入到DataLoaderIter里,判斷是單進(jìn)程還是多進(jìn)程。
  • 然后進(jìn)入到Sampler里進(jìn)行采樣,獲得一批一批的索引,這些索引就指引了要讀取哪些數(shù)據(jù)。
  • 然后進(jìn)入到DatasetFetcher中要依據(jù)Sampler獲得的Index對數(shù)據(jù)進(jìn)行獲取。
  • 在DatasetFetcher調(diào)用Dataset類,這里是我們自定義的數(shù)據(jù)集,數(shù)據(jù)集一般放在硬盤中,Dataset里面一般都有數(shù)據(jù)的路徑,所以也就能知道了從哪讀取數(shù)據(jù)。
  • 自定義的Dataset類里再調(diào)用__getitem__函數(shù),這里有我們編寫的如何讀取數(shù)據(jù)的代碼,依據(jù)這里的代碼讀取數(shù)據(jù)。
  • 讀取出來后可能需要進(jìn)行圖像預(yù)處理或數(shù)據(jù)增強,所以緊接著是transforms方法。
  • 經(jīng)過上述的讀取,已經(jīng)得到了圖像及其標(biāo)簽,但是還需要將它們組合成batch,就是下面的collate_fn,最后得到了一個batch一個batch的數(shù)據(jù)。
  • 這個過程中的三個主要問題:

  • 讀哪些數(shù)據(jù):Sampler輸出要讀取的數(shù)據(jù)的Index。
  • 從哪讀數(shù)據(jù):Dataset類中的data_dir,即數(shù)據(jù)的存放路徑。
  • 怎么讀數(shù)據(jù):Dataset類中編寫的__getitem__()函數(shù)。
  • 精力有限,就不在這里寫一個具體讀取數(shù)據(jù)的代碼了,這里有很多有價值的課程和資料可以學(xué)習(xí):深度之眼PyTorch框架

    總結(jié)

    以上是生活随笔為你收集整理的PyTorch框架学习八——PyTorch数据读取机制(简述)的全部內(nèi)容,希望文章能夠幫你解決所遇到的問題。

    如果覺得生活随笔網(wǎng)站內(nèi)容還不錯,歡迎將生活随笔推薦給好友。