日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪(fǎng)問(wèn) 生活随笔!

生活随笔

當(dāng)前位置: 首頁(yè) > 编程资源 > 编程问答 >内容正文

编程问答

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

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

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

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

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

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

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

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

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

    總的來(lái)說(shuō),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ù)比較多,如下所示:

    介紹幾個(gè)主要的:

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

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

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

    2.torch.utils.data.Dataset

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

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

    經(jīng)過(guò)上面簡(jiǎn)單的介紹,下面來(lái)看一下數(shù)據(jù)讀取的整體流程:

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

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

    總結(jié)

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

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