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

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 编程资源 > 编程问答 >内容正文

编程问答

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

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

PyTorch框架學習八——PyTorch數據讀取機制(簡述)

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

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

一、數據

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

一般數據部分可以分為四個主要的內容去學習:

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

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

    二、DataLoader與Dataset

    1.torch.utils.data.DataLoader

    功能:構建可迭代的數據裝載器。

    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)

    參數比較多,如下所示:

    介紹幾個主要的:

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

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

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

    2.torch.utils.data.Dataset

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

    三、數據讀取整體流程

    經過上面簡單的介紹,下面來看一下數據讀取的整體流程:

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

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

    總結

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

    如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。